Plantilla y herencia

Resuelto
jihane jihane Mensajes publicados 100 Estado Miembro -  
jihane jihane Mensajes publicados 100 Estado Miembro -
Hola,

por favor, ¿en la herencia si la clase base se declara como plantilla
template<class T> NOMBRE DE LA CLASE, puede la clase derivada también utilizar el tipo genérico de la clase base, es decir, ¿podemos usar la palabra clave T en lugar del tipo en la clase derivada? Gracias por su futura respuesta :)

1 respuesta

KX Mensajes publicados 19031 Estado Moderador 3 020
 
Cada vez que reemplazas tu plantilla por un tipo concreto, recompilas una nueva clase, que a su vez compilará su clase madre. Al final solo tendrás tipos concretos. Por lo tanto, no debería haber problema...

template <typename T> class Mere { } template <typename T> class Fille : public Mere<T> { }

--
La confianza no excluye el control.
0
jihane jihane Mensajes publicados 100 Estado Miembro
 
Entonces, ¿podemos decir que la clase hija hereda el tipo abstracto??? Y gracias por la respuesta.
0
KX Mensajes publicados 19031 Estado Moderador 3 020
 
No es abstracto más que en tu código, una vez realizada la compilación la clase es concreta, y no hay más ambigüedad que si hubieras hecho varias clases madre y varias clases hijas con solo el tipo de la plantilla que difiere.
0
jihane jihane Mensajes publicados 100 Estado Miembro
 
OK, gracias, pero si quiero declarar la clase hija como genérica pero con otro tipo, es decir, no el de la clase madre, ¿qué haría?
0
KX Mensajes publicados 19031 Estado Moderador 3 020
 
Harías como si la clase madre no fuera un template...

No estoy seguro de la sintaxis con dos templates, pero en principio estos dos códigos deberían tener más o menos el mismo sentido para la clase hija.

class Madre {} template <typename T> class Hija : public Madre {} //------------ template <typename U> class Madre {} template <typename T,typename U> class Hija : public Madre<U> {}
0
jihane jihane Mensajes publicados 100 Estado Miembro
 
Muchas gracias por ayudarme, y gracias por su tiempo, ahora lo he entendido bien :)
0