Когда C ++ ковариация является лучшим решением?

Этот вопрос был задан несколько часов назад и заставил меня понять, что я никогда не использовал ковариантные типы возврата в своем собственном коде. Для тех, кто не уверен, что ковариация этоПозволяет разным типам возвращаемых (обычно) виртуальных функций при условии, что типы являются частью одной и той же иерархии наследования. Например:

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

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

Различные типы возврата двух функций f () называются ковариантными. Более старые версии C ++ требовали, чтобы возвращаемые типы были одинаковыми, поэтому B должен выглядеть следующим образом:

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

Итак, мой вопрос: есть ли у кого-нибудь реальный пример, где требуются ковариантные возвращаемые типы виртуальных функций, или же вырабатываете лучшее решение для простого возврата базового указателя или ссылки?

Ответы на вопрос(6)

Ваш ответ на вопрос