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'來保存對象的細節只在第一個點之後出現。 –