¿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?

Respuestas a la pregunta(3)

Su respuesta a la pregunta