Wenn C++ - Kovarianz-die beste Lösung?

Diese Frage gefragt wurde, hier ein paar Stunden und machte mir klar, dass
Ich habe eigentlich nie verwendet kovariante Rückgabetypen in meinem eigenen code. Für diejenigen, die
nicht sicher, was Kovarianz ist, es ist so dass der Rückgabe-Typ (in der Regel) virtuelle
Funktionen abweichen, vorausgesetzt, die Typen sind Teil der gleichen Vererbung
Hierarchie. Zum Beispiel:

struct A {
   virtual ~A();
   virtual A * f();
   ...
};

struct B : public A {
   virtual B * f();
   ...
};

Die verschiedenen Rückgabetypen der beiden f () - Funktionen sind, sagte kovariante. Ältere Versionen von C++ erforderlich, die Rückgabe-Typen gleich sein, also B würde das so Aussehen:

struct B : public A {
   virtual A * f();
   ...
};

So, meine Frage: Hat jemand ein reales Beispiel, wo kovariante Rückgabetypen von virtuellen Funktionen erforderlich sind, oder produzieren eine überlegene Lösung einfach zurückgeben einer base pointer oder Referenz?

  • Wenn ich das lese Frage meine Reaktion war genau die gleiche. Was ist das problem - nicht verwenden kovariante Rückgabetypen!
InformationsquelleAutor | 2009-08-11
Schreibe einen Kommentar