问题
I wanted to know why C++ does not support co-variance in parameters like in example below or if there is a way to achieve it?
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
};
回答1:
The return type is permissible since derived
inherits from base
, but the function parameter can't work - not all base
instances will be a derived
also. What's supposed to happen in the cases where func
is called on a pointer to base
with a parameter that's not a derived
? The most derived implementation isn't callable.
来源:https://stackoverflow.com/questions/53655187/c-contravariance-in-parameters