Ist statischer Polymorphismus für die Implementierung einer Schnittstelle sinnvoll?
und frohe Weihnachten euch allen!
Ich lerne etwas über statischen Polymorphismus und lese Andrei Alexandrescus ausgezeichnetes Buch über richtlinienbasiertes Design. In meinem Code bin ich auf Folgendes gestoßen: Ich habe eine BenutzeroberflächeInterface
was diese Methode angibtFoo
muss anwesend sein. Diese Schnittstelle wird von Klasse implementiertImpl
. Ich habe die folgenden zwei Möglichkeiten:
1) Dynamischer Polymorphismus
class Interface {
public:
virtual void Foo() = 0;
}
class Impl : public Interface {
public:
void Foo() {};
}
2) Statischer Polymorphismus
class Impl {
{
public:
void Foo() {};
}
template <class I>
class Interface : public I
{
public:
void Foo() { I::Foo(); } //not actually needed
}
Ist es in diesem Fall sinnvoll, statischen Polymorphismus zu verwenden? Bietet der zweite Ansatz Vorteile gegenüber dem ersten? Die Benutzeroberfläche gibt nur das Vorhandensein einiger Methoden an, und ihre Mechanismen sind für verschiedene Implementierungen gleich - also nicht ganz wie in den in diesem Buch beschriebenen Fällen, sodass ich der Meinung bin, dass ich die Dinge möglicherweise nur zu kompliziert mache.
Aktualisieren: Ich brauche kein polymorphes Verhalten zur Laufzeit. Die korrekte Implementierung ist zum Zeitpunkt der Kompilierung bekannt.