Modelos covariantes C ++
Sinto que este já foi solicitado antes, mas não consigo encontrá-lo no SO, nem encontro nada útil no Google. Talvez "covariante" não seja a palavra que estou procurando, mas esse conceito é muito semelhante aos tipos de retorno covariante em funções, então acho que provavelmente está correto. Aqui está o que eu quero fazer e isso me dá um erro de compilador:
class Base;
class Derived : public Base;
SmartPtr<Derived> d = new Derived;
SmartPtr<Base> b = d; // compiler error
Suponha que essas aulas sejam totalmente desenvolvidas ... acho que você entendeu a idéia. Não pode converter umSmartPtr<Derived>
dentro deSmartPtr<Base>
por algum motivo pouco claro. Lembro-me de que isso é normal em C ++ e em muitas outras linguagens, embora no momento não me lembre do porqu
Minha pergunta raiz é: qual é a melhor maneira de executar esta operação de atribuição? Atualmente, estou puxando o ponteiro doSmartPtr
, convertendo-o explicitamente para o tipo base e agrupando-o em um novoSmartPtr
do tipo apropriado (observe que isso não está vazando recursos, porque nossaSmartPtr
class usa contagem de referência intrusiva). Isso é longo e bagunçado, principalmente quando preciso envolver oSmartPtr
em outro objeto ... algum atalho?