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'](http://en.cppreference.com/w/cpp/memory/unique_ptr)对象吗?从那里开始,然后想想它将如何存储在你的向量中。 –
是否[这](http://stackoverflow.com/questions/17417848/stdunique-ptr-with-derived-class)回答你的问题: –
我认为你在这里失踪的主要观点是如何使用继承和多态性,例如如果您需要多态处理,您必须使用指向基类的指针或引用来指向/引用派生类。在这里使用'std :: unique_ptr'来保存对象的细节只在第一个点之后出现。 –