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

问题描述 投票:0回答:1

如果我有一个带有虚函数Clone的抽象类A和一个继承A并重写Clone的模板类B,我想让这个函数返回类型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 <T> *,但我不想在堆上创建它。有没有办法做到这一点? (如果可能的话,我不想指向克隆的写入位置。)

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

c++ templates inheritance polymorphism
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.