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

Respuestas a la pregunta(4)

Su respuesta a la pregunta