Переосмысление Typedef в производном классе?

Так что после того, как после того, как после того, как после того, как после того, как после того, как и искал для ответа на мой вопрос, я наконец отказался от своих навыков 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').

выше, было одним из решений, которые я пытался. Я также попробовал создать виртуальный вложенный класс в базе , и переопределен в , полученном , и это не скомпилировалось также (это было также очень грязно).

Я также не могу получить яблоки и апельсины из одного базового класса для возврата указателя / ссылки на свой родительский класс в базе и , полученный . Мне нужно физически вернуть экземпляр объекта.

  1. Есть ли какие-то способы объявить абстрактные типичные файлы?
  2. Если нет, есть ли другое решение, которое может достичь того, что я пытаясь сделать?
7
задан Mark Hall 13 September 2011 в 07:14
поделиться