因此,在搜索了很多關於我的問題的答案後,我終於放棄了我的Google技能。重新定義派生類中的typedef?
我有一個基類基地,和派生類派生。我想覆蓋基類類中的類型,其中派生類中的一個。這裏有一個例子:
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').
上面是解決我嘗試之一。我也嘗試在基地中創建虛擬嵌套類,並在衍生重新定義,並且也沒有編譯(這也非常混亂)。
我也不能導出蘋果和桔子從同一基類的指針/參考返回到它們的父類中基地和派生。我需要物理返回對象的一個實例。
- 有沒有什麼辦法可以聲明抽象typedefs?
- 如果沒有,是否有任何其他解決方案可以實現我想要做的 ?
「override」關鍵字通過讓編譯器檢查函數是否實際覆蓋任何基本方法來幫助消除人爲錯誤(如錯別字)。至於這個問題,我知道這一點。有沒有什麼辦法可以使它們協變而不使用指針或引用? – Zeenobit
所以我想沒有解決方案來完成這項工作。謝謝,人們。我會嘗試使用不同的層次結構。 – Zeenobit