?++抽象返回类型
我有以下类的结构:
struct A {
virtual void function() = 0;
};
struct B : A {
void function() override {
// ...implementation...
}
};
struct C {
virtual A a() = 0;
};
struct D : public C {
A a() {
return B{};
}
}
主要思想是:我并不真正关心将从中返回什么类D::a,我希望它拥有的唯一属性是function()成员函数。所以我将返回类型表示为A具有该属性的抽象类,然后尝试返回B派生自A. 但这不起作用,给error: invalid abstract return type. 您能否建议一种在 C++ 中实现所需效果的方法?
回答
在 C++ 中,你不能对对象进行多态,因为对象可以有不同的大小,而在 C++ 中,类型具有值语义。但是,您可以使用引用和指针进行多态。所以你的功能可能是:
A* a();
// or
A& a();
这确实意味着您可能会遇到所有权问题。你也可以返回一个智能指针:
unique_ptr<A> a();