2014-09-03 24 views
5

È possibile utilizzare la proprietà di covarianza per i tipi generici (tramite i modelli) in C++?C++ Template Covariance

Ho già trovato this question che risponde alla mia domanda, ma lo chiedo di nuovo poiché sono già passati due anni! In aggiunta, anche se è spiegato che non ci può essere covarianza in C++ nei template, non c'è alcuna spiegazione a riguardo!

Potete aiutarmi a notizie/spiegazione di questo argomento?

+2

Si dovrebbe aggiungere un esempio di codice per quello che si chiama "modello di covarianza": la risposta della questione legata applicano ancora – quantdev

+3

Se qualche costruzione presunta non fa parte della lingua, quanta "spiegazione" ti soddisfa per quanto riguarda la sua assenza dalla lingua? Non è "non esiste" abbastanza? –

+1

"In addiction ..." errore di battitura o semplicemente non si può ottenere abbastanza codice? Hmmm ... – WhozCraig

risposta

4

dato il riferimento a una precedente interrogazione come dispositivo di chiarimento, sembra ti stai chiedendo perché T<Derived> non è di solito derivato da T<Base>.

Considerare T = std::shared_ptr.

Non si vuole essere in grado di fare questo:

void foo(shared_ptr<Base>& p) { p.reset(new Derived2); } 

auto main() -> int 
{ 
    shared_ptr<Derived1> p; 
    foo(p); // Oops, p now points to unrelated Derived2 
}