Uma coleção polimórfica de CRTP (Curiously Recorrring Template Pattern) em C ++?
Eu tenho aulaBase
da qual eu tenho duas classes,DerivedA
eDerivedB
conforme definido abaixo.
template <typename Derived>
class Base{
public:
double interface(){
static_cast<Derived*>(this)->implementation();
}
};
class Derived,A : public Base<DerivedA>{
public:
double implementation(){ return 2.0;}
};
class DerivedB : public Base<DerivedB>{
public:
double implementation(){ return 1.0;}
};
Em resumo, estou tentando fazer o seguinte para manter uma coleção de objetos, alguns dos quais sãoDerivedA
e alguns dos quais sãoDerivedB
:
std::vector<std::shared_ptr<Derived>>
O que é obviamente impossível, porque agora eu fiz a aulaDerived
uma classe modelada.
Existe alguma maneira de criar / manter uma coleção polimórfica de objetos?
EDIT: Infelizmente, uma estrutura de modelo simples não funciona como a funçãoimplementation
é modelado no meu programa atual - entãoimplementation
teria que ser uma função virtual pura modelada, que não pode ser. Perdoe minha falta de explicação.