存储抽象对象的实例

时间:2016-08-15 11:19:08

标签: c++ vector abstract-class

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的实例转换为元素的唯一指针。

如果这是重复的道歉,我尝试寻找解决方案,但我找不到任何东西。

1 个答案:

答案 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