因此,在搜索了很多关于我的问题的答案后,我终于放弃了我的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