衍生模板类的覆盖返回类型

Overriding return type of derived template class

本文关键字:覆盖 返回类型      更新时间:2023-10-16

如果我有一些抽象类 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或堆。使用其他接口进行增强并不难。