参数中的 C++ 协方差

标签 c++ virtual covariance

我想知道为什么 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
};

最佳答案

返回类型是允许的,因为 derived 继承自 base,但函数参数不能工作 - 并非所有 base 实例都会derived 也是。如果在指向 base 的指针上调用 func 且参数不是 derived 的情况下会发生什么?最衍生的实现是不可调用的。

关于参数中的 C++ 协方差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11821158/

相关文章:

c++ - 为自定义 C++ 类实现 Visual Studio 的自定义向导

c++ - 使用 std::bind 时出现运行时错误

具有纯虚函数的模板类的 C++ 语法?

r - 在 Lavaan 中将协方差设置为零

scala - 在 Spark 线性回归中获取协方差矩阵

c# - 为什么将基类设置为等于派生类型仅在设置范围内起作用?

c++ - QString 的替代品是什么?

c++ - 如何在先前输入后在 C++ 中使用 "gets"函数?

c++ - 覆盖虚函数

c++ - 指向成员问题的指针