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

时间:2017-12-24 00:33:14

标签: c++ templates inheritance polymorphism

如果我有一个抽象类 A ,虚拟函数克隆,模板类 B 继承 A 并覆盖克隆,我想让此函数返回类型 B< T> ,而原始(在 A 中)返回类型 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);
    }
};

我相信这是不可能的,除非我从A的克隆和B的克隆中返回 A * B&lt; T&gt; * ,但我不想创建此在堆上。有没有办法做到这一点? (如果可能的话,我不想指向克隆的写入位置。)

注意:我遗漏了一些像构造函数这样的“噪音”。

1 个答案:

答案 0 :(得分:0)

不,价值观无法做到这一点。值具有特定和固定的存储和类型。

您可以创建多态值类型,例如n*7 % 32,但它只使用继承作为实现细节(充其量)。

std::function是一个多态值类型,几乎没有接口;它根据内容大小使用SBO或堆。用附加接口扩充它并不是非常困难。