¿Una colección polimórfica de patrón de plantilla curiosamente recurrente (CRTP) en C ++?
Tengo una claseBase
de las cuales tengo dos clases,DerivedA
yDerivedB
Como es definido debajo.
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;}
};
En resumen, estoy tratando de hacer lo siguiente para mantener una colección de objetos, algunos de los cuales sonDerivedA
y algunos de los cuales sonDerivedB
:
std::vector<std::shared_ptr<Derived>>
Lo cual es obviamente imposible porque ahora he hecho la claseDerived
Una clase con plantilla.
¿Hay alguna forma de crear / mantener una colección polimórfica de objetos?
EDITAR: Desafortunadamente, una estructura simple con plantilla no funciona como la funciónimplementation
está basado en mi programa actual, entoncesimplementation
tendría que ser una función virtual pura con plantilla, que no puede ser. Perdón por mi falta de explicación.