如果我有一些抽象类 a 带有虚拟函数 clone 和模板类 b 继承 a 和Overrides clone ,我想使此函数返回类型 b<strong>)返回类型 a 。
我尝试了这个,但是编译器告诉我我无法返回抽象类:
class A
{
public:
virtual A Clone() const = 0;
};
template <typename T>
class B : public A
{
private:
T value;
public:
B<T> Clone() const override
{
return B<T>(value);
}
};
我相信这是不可能的在堆上。有没有办法做到这一点?(如果可能的话,我不想将指针写在哪里写克隆。)
注意:我遗漏了一些"噪声",例如构造函数等。
no,值无法执行此操作。值具有特定和固定的存储和类型。
您可以创建多态值类型,例如std::function
,但它仅将继承用作实现细节(最多)。
std::any
是一种几乎没有接口的多态值类型。根据内容大小,它使用SBO或堆。使用其他接口进行增强并不难。