【发布时间】:2018-06-06 00:46:45
【问题描述】:
如果我有一些抽象类 A 带有一个虚函数 Clone 和一个继承 A 的模板类 B > 并覆盖 Clone,我想让这个函数返回类型 B
我试过了,但编译器告诉我不能返回抽象类:
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
注意:我省略了一些“噪音”,例如构造函数等。
【问题讨论】:
-
但我不想在堆上创建它 -- 指针不需要与堆有任何关系。
-
我明白,但我想返回一个 B
。 -
我可以从 A 的克隆返回 B
并覆盖 B 以使其没有字段吗? -
这似乎变成了XY problem。在高层次上,你想要完成什么?
-
您是否考虑过使用
std::vector或boost::any 或std::any?
标签: c++ templates inheritance polymorphism