【发布时间】:2016-08-15 11:19:07
【问题描述】:
class element
{
public:
element();
virtual void foo() = 0;
};
class bar : public element
{
public:
bar();
void foo() override
{
// Stuff
}
};
class baz : public element
{
public:
bar();
void foo() override
{
// Stuff
}
};
我希望将 bar 的实例和 baz 的实例存储在同一个向量或列表中。
vector<element> elements;
bar a = bar();
baz b = baz();
elements.push_back(a);
elements.push_back(b);
我知道上面的代码行不通,但我正在寻找具有这种结构的东西。
我在某处读到您可以存储unique_ptr< element> 的向量,但我不知道如何将 bar 或 baz 的实例转换为元素的唯一指针。
抱歉,如果这是重复的,我尝试寻找解决方案,但找不到任何东西。
【问题讨论】:
-
你知道如何创建 any
std::unique_ptr对象吗?从那里开始,然后考虑如何将其存储在您的向量中。 -
this 是否回答您的问题:
-
我认为您在这里缺少的要点是如何使用继承和多态性,例如如果您想要多态处理,您必须使用基类的指针或引用来指向/引用派生类。此处使用
std::unique_ptr保存对象的细节仅在第一点之后。
标签: c++ vector abstract-class