Когда 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)

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