Czy statyczny polimorfizm ma sens dla implementacji interfejsu?
i Wesołych Świąt wszystkim!
Uczę się o statycznym polimorfizmie i czytam doskonałą książkę Andrei Alexandrescu na temat projektowania opartego na polityce. W moim kodzie natknąłem się na następujące elementy: Mam interfejsInterface
który określa tę metodęFoo
musi być obecny. Ten interfejs będzie implementowany przez klasęImpl
. Mam następujące dwie opcje:
1) Polimorfizm dynamiczny
class Interface {
public:
virtual void Foo() = 0;
}
class Impl : public Interface {
public:
void Foo() {};
}
2) Statystyczny polimorfizm
class Impl {
{
public:
void Foo() {};
}
template <class I>
class Interface : public I
{
public:
void Foo() { I::Foo(); } //not actually needed
}
Czy w tym przypadku ma sens używanie statycznego polimorfizmu? Czy drugie podejście oferuje jakiekolwiek korzyści w porównaniu z pierwszym? Interfejs określa tylko obecność niektórych metod, a jego mechanika jest taka sama dla różnych implementacji - tak nie jest jak przypadki opisane w książce, więc czuję, że mogę być tylko zbyt skomplikowany.
Aktualizacja: Nie potrzebuję zachowania polimorficznego w czasie wykonywania; poprawna implementacja jest znana w czasie kompilacji.