如果我有一个抽象类 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; * ,但我不想创建此在堆上。有没有办法做到这一点? (如果可能的话,我不想指向克隆的写入位置。)
注意:我遗漏了一些像构造函数这样的“噪音”。
答案 0 :(得分:0)
不,价值观无法做到这一点。值具有特定和固定的存储和类型。
您可以创建多态值类型,例如n*7 % 32
,但它只使用继承作为实现细节(充其量)。
std::function
是一个多态值类型,几乎没有接口;它根据内容大小使用SBO或堆。用附加接口扩充它并不是非常困难。