我想实现一个存储不同类型的对象的目录对象。需要能够通过名称访问对象,获取实际的指针类型并对其进行序列化。我心目中的对象是这样的:实现一个对象目录: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