C ++ plantillas covariantes

Siento que ya se me ha preguntado esto, pero no puedo encontrarlo en SO, ni puedo encontrar nada útil en Google. Tal vez "covariante" no es la palabra que estoy buscando, pero este concepto es muy similar a los tipos de retorno covariantes en funciones, por lo que creo que es probablemente correcta. Esto es lo que quiero hacer y me da un error del compilador:

class Base;
class Derived : public Base;

SmartPtr<Derived> d = new Derived;
SmartPtr<Base> b = d; // compiler error

Assume esas clases se plasmen plenamente ... Creo que se entiende la idea. No puede convertir unaSmartPtr<Derived> en unaSmartPtr<Base> Por alguna razón no está claro. Recuerdo que esto es normal en C ++ y muchos otros idiomas, aunque por el momento no puedo recordar por qué.

regunta raíz @My es: ¿cuál es la mejor manera de realizar esta operación de asignación? Actualmente, estoy tirando el puntero fuera de laSmartPtr, Upcasting explícitamente al tipo base, a continuación, envolviéndolo en una nuevaSmartPtr Del tipo apropiado (nota que esto no tiene fugas recursos, porque nuestra casa-crecidoSmartPtr Clase utiliza el recuento de referencias intrusiva). Eso es largo y complicado, especialmente cuando entonces necesito para envolver elSmartPtr en otro objeto más ... ¿algún atajo?

Respuestas a la pregunta(6)

Su respuesta a la pregunta