Так что после того, как после того, как после того, как после того, как после того, как после того, как и искал для ответа на мой вопрос, я наконец отказался от своих навыков Google.
У меня есть базовый класс , а полученный класс получен . Я хочу переопределить тип в классе класс с одним в , полученный класс. Вот пример:
class Apple {
public:
Apple() { }
// ...
};
class Orange {
public:
Orange() { }
// ...
};
class Base {
public:
typedef Apple fruit;
// ...
virtual fruit func() { return Apple(); }
};
class Derived : public Base {
public:
typedef Orange fruit;
// ...
fruit func() override { return Orange(); } // <-- Error C2555!
};
Этот код не работает, и он дает
C2555 error ('Derived::func': overriding virtual function return type differs and is not covariant from 'Base::func').
выше, было одним из решений, которые я пытался. Я также попробовал создать виртуальный вложенный класс в базе , и переопределен в , полученном , и это не скомпилировалось также (это было также очень грязно).
Я также не могу получить яблоки и апельсины из одного базового класса для возврата указателя / ссылки на свой родительский класс в базе и , полученный . Мне нужно физически вернуть экземпляр объекта.