Wann ist C ++ - Kovarianz die beste Lösung?

Diese Frage wurde hier vor ein paar Stunden gefragt und machte mir klar, dass ich in meinem eigenen Code nie kovariante Rückgabetypen verwendet habe. Wenn Sie sich nicht sicher sind, was Kovarianz ist, können Sie den Rückgabetyp von (normalerweise) virtuellen Funktionen unterscheiden, sofern die Typen Teil derselben Vererbungshierarchie sind. Zum Beispiel:

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

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

Die verschiedenen Rückgabetypen der beiden f () -Funktionen sollen kovariant sein. In älteren Versionen von C ++ mussten die Rückgabetypen identisch sein, sodass B folgendermaßen aussehen musste:

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

Meine Frage: Hat jemand ein reales Beispiel, in dem kovariante Rückgabetypen für virtuelle Funktionen erforderlich sind, oder eine bessere Lösung, um einfach einen Basiszeiger oder eine Referenz zurückzugeben?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage