Qual é a motivação por trás do polimorfismo estático em C ++?

Eu entendo a mecânica depolimorfismo estático usando oPadrão de modelo curiosamente recorrente. Eu só não entendo o que é bom para.

A motivação declarada é:

Nós sacrificamos alguma flexibilidade de polimorfismo dinâmico paraRapidez.

Mas por que se preocupar com algotão complicado gostar:

template <class Derived>
class Base
{
public:
    void interface()
    {
         // ...
         static_cast<Derived*>(this)->implementation();
         // ...
    }
};

class Derived : Base<Derived>
{
private:
     void implementation();
};

Quando você pode apenas fazer:

class Base
{
public: 
    void interface();
}

class Derived : public Base
{
public: 
    void interface();
}

Meu melhor palpite é que não há diferença semântica no código e que é apenas uma questão de bom estilo C ++.

Herb Sutter escreveu emExceptional C++ style: Chapter 18 naquela:

Prefiro tornar as funções virtuais privadas.

Acompanhado, claro, com uma explicação completa porque isso ébom estilo.

No contexto desta diretriz o primeiro exemplo éBoa, Porque:

ovoid implementation() função no exemplo pode fingir ser virtual, uma vez que está aqui para realizar a personalização da classe. Portanto, deve ser privado.

E o segundo exemplo émau, Desde a:

Não devemos nos intrometer na interface pública para executar a personalização.

Minha pergunta é:

O que estou perdendo sobre o polimorfismo estático? É tudo sobre um bom estilo C ++?Quando deve ser usado? Quais são algumas diretrizes?

questionAnswers(3)

yourAnswerToTheQuestion