我想知道为什么C++不支持像下面的例子中那样使用参数协变,或者是否有一种方法可以实现这个功能?
class base {
public:
virtual base* func(base * ptr) { return new base(); }
};
class derived : public base {
public:
virtual derived* func(derived * ptr) override { return new derived(); } //not allowed
};
dynamic_cast<derived*>
来获取派生值;这也为您提供了抛出无效参数异常的机会。 - Spencer