¿Tiene sentido el polimorfismo estático para implementar una interfaz?
y feliz navidad a todos!
Estoy aprendiendo sobre el polimorfismo estático y estoy leyendo el excelente libro de Andrei Alexandrescu sobre diseño basado en políticas. Me encontré con lo siguiente, en mi código: Tengo interfazInterface
que especifica ese métodoFoo
debe estar presente. Esta interfaz será implementada por clase.Impl
. Tengo las siguientes dos opciones:
1) polimorfismo dinámico
class Interface {
public:
virtual void Foo() = 0;
}
class Impl : public Interface {
public:
void Foo() {};
}
2) polimorfismo estático
class Impl {
{
public:
void Foo() {};
}
template <class I>
class Interface : public I
{
public:
void Foo() { I::Foo(); } //not actually needed
}
¿Tiene sentido usar polimorfismo estático en este caso? ¿El segundo enfoque ofrece algún beneficio en comparación con el primero? La interfaz solo especifica la presencia de algunos métodos, y su mecánica es la misma para diferentes implementaciones, por lo que no son tan parecidos a los casos descritos en el libro, así que creo que solo puedo complicar las cosas.
Actualizar: No necesito comportamiento polimórfico en tiempo de ejecución; La implementación correcta es conocida en tiempo de compilación.