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