Tengo un problema con la conversión implícita, las plantillas y la herencia de las clases de la plantilla. Lo siguiente es lo que extraje de mi proyecto, he omitido que algunas clases son abstractas, pero no tiene que ver con el caso.Versión implícita de la clase derivada de la clase base de la plantilla
class A {};
class B : public A {};
template <typename T> class Base {};
class Derived : public Base<B> {};
int main() {
Derived d;
Base<A>* base = new Derived();
}
Básicamente, tengo una clase base de la plantilla Base
que derivo de Derived : public Base<B>
. Luego tengo que convertirlo a la forma más general de Base, que es Base<A>
.
yo habría pensado que puedo lanzar un objeto procedente Base<B>
-Base<A>
implícitamente, como se deriva de B
A
. ¿Estoy haciendo algo mal o cómo podría lanzar ese implícitamente? Esto es importante ya que necesito aceptar todos los tipos de clases derivadas en un método de Base
como un parámetro .
Gracias de antemano.
Bueno, gracias. ¿Cómo intentaría arreglar eso? ¿Consideraría boost :: any como una opción? – opatut
@opatut: considere usar una plantilla para su método. Sin más información, eso es todo lo que puedo sugerir. – Puppy
Parece que la plantilla funciona, aunque no puedo verificarla usando static_assert (std :: is_base_of (...)), pero eso no es demasiado importante de todos modos. – opatut