Когда 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();
...
};
Итак, мой вопрос: есть ли у кого-нибудь реальный пример, где требуются ковариантные возвращаемые типы виртуальных функций, или же вырабатываете лучшее решение для простого возврата базового указателя или ссылки?