我想實現一個存儲不同類型的對象的目錄對象。需要能夠通過名稱訪問對象,獲取實際的指針類型並對其進行序列化。我心目中的對象是這樣的:實現一個對象目錄:boost :: any,boost :: variant或?
struct Object {
std::string name;
SomeType ptr;
};
struct Dir {
std::string name;
std::set<Object> objects;
};
「SOMETYPE」我想使用boost ::變種。但是,似乎我需要在運行時將對象類型添加到變體列表中。即使我知道在未來一個目錄的對象類型,這將成爲
template <typename Typelist>
struct Object<Typelist> {
std::string name;
boost::variant<Typelist> objects;
};
其中Typelist
是不同迪爾斯不同。然後,有一個目錄將是Typelist的動態結合。看起來很複雜。它將很快達到50個變體類型的極限。替代方法是Boost :: Any來簡化語義。但我想迭代一組對象,並在它上面做一些事情 - 每個對象都是boost :: fusion adapt_struct - 我想在每個對象的每個成員上融合:: for_each並顯示它們,例如。任何替代方案或建議?
是不是一個基類,一個模型在你的目錄中的任意項目,是一個選項?然後,您可以保留一個shared_ptr或一個指向特定對象的普通指針,然後在您訪問它們時施放它們。 –
這將是其中一個選項。但是,一旦我存儲了基類,問題是如何知道我可以將它們轉換爲什麼類型,以便對實際類型進行一些有用的操作。存儲typeinfo似乎不足以讓我做static_cast(t),在那裏我需要「T」。 –
surfcode