2014-09-03 11 views
5

Können Sie die Covarianz-Eigenschaft für die generischen Typen (über die Vorlagen) in C++ verwenden?C++ - Vorlage Covariance

Ich habe bereits this question gefunden, die meine Frage beantwortet, aber ich frage es wieder, da es schon zwei Jahre her ist! In der Sucht, obwohl es erklärt wird, dass es in C++ in Vorlagen keine Kovarianz geben kann, gibt es keine Erklärung dafür!

Können Sie mir bei Neuigkeiten/Erklärungen zu diesem Thema helfen?

+2

Sie ein Codebeispiel hinzufügen sollte für das, was Sie „Template Kovarianz“ nennen: die Antwort der verknüpften Frage noch – quantdev

+3

Wenn einiger angeblichen Bau anwenden ist nicht Teil der Sprache, wie viel "Erklärung" würde Sie hinsichtlich seiner Abwesenheit von der Sprache befriedigen? Ist nicht "es existiert nicht" genug? –

+1

"In Sucht ..." Tippfehler, oder kann einfach nicht genug Codierung bekommen? Hmmm ... – WhozCraig

Antwort

4

Angesichts der Verweis auf eine frühere Frage als Klärung Gerät, es scheint, Sie fragen, warum T<Derived> ist in der Regel nicht von T<Base> abgeleitet.

Betrachten Sie T = std::shared_ptr.

Sie wollen nicht in der Lage sein, dies zu tun:

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 
}