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的实例转换为元素的唯一指针。
如果这是重复的道歉,我尝试寻找解决方案,但我找不到任何东西。
答案 0 :(得分:2)
使用std::make_unique
创建由unique_ptr
s。管理的对象。
std::vector<std::unique_ptr<element>> vector; // Empty vector
vector.push_back(std::make_unique<bar>()); // Push a new bar
vector.push_back(std::make_unique<baz>()); // Push a new baz