我想知道为什么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
};
解决方法:
返回类型是允许的,因为派生继承自base,但函数参数不起作用 – 并非所有基本实例也是派生的.如果在指向base的指针上使用不是派生的参数调用func,应该会发生什么?派生最多的实现不可调用.