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?