?++抽象返回类型

我有以下类的结构:

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();


以上是?++抽象返回类型的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>