¿Cuál es la motivación detrás del polimorfismo estático en C ++?
Entiendo la mecanica depolimorfismo estático utilizando laPatrón de plantilla curiosamente recurrente. Simplemente no entiendo para qué sirve.
La motivación declarada es:
Sacrificamos cierta flexibilidad de polimorfismo dinámico paravelocidad.
Pero ¿por qué molestarse con algo?tan complicado me gusta:
template <class Derived>
class Base
{
public:
void interface()
{
// ...
static_cast<Derived*>(this)->implementation();
// ...
}
};
class Derived : Base<Derived>
{
private:
void implementation();
};
Cuando puedes simplemente hacer:
class Base
{
public:
void interface();
}
class Derived : public Base
{
public:
void interface();
}
Mi mejor conjetura es que no hay diferencia semántica en el código y que es solo una cuestión de buen estilo C ++.
Herb Sutter escribió enExceptional C++ style: Chapter 18
ese:
Prefiero hacer funciones virtuales privadas.
Acompañado, por supuesto, con una explicación detallada de por qué esto esbuen estilo.
En el contexto de esta guía el primer ejemplo esbueno, porque:
losvoid implementation()
La función en el ejemplo puede pretender ser virtual, ya que está aquí para realizar la personalización de la clase. Por lo tanto, debe ser privado.
Y el segundo ejemplo esmalo, ya que:
No debemos entrometernos con la interfaz pública para realizar la personalización.
Mi pregunta es:
¿Qué me falta de polimorfismo estático? ¿Se trata de un buen estilo de C ++?¿Cuándo debería usarse? ¿Cuáles son algunas pautas?