【发布时间】:2012-08-03 00:05:14
【问题描述】:
我想知道为什么 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*>获取派生值;这也使您有机会为错误的参数抛出异常。
标签: c++ virtual covariance