将类名称映射为键

时间:2012-12-16 10:40:01

标签: c++ class stl key typename

是否有可能以某种方式使用类名作为容器中的键?

我想存储从同一个基础继承的类的对象。

struct storage {};

struct storagetransform : public storage
{
    vec3 position, rotation;
};

struct storageform : public storage
{
    unsigned int vertex, texture;
};

我有一个嵌套的地图。 ...应填充特定的类名称,例如storagetransformstorageform作为类型或字符串或其他。

unordered_map<..., unordered_map<int, storage*> > list;

我想访问容器的对象,如下所示。

list[storagetransform](1337);

这可能以某种方式?此外,还有更好的解决方案吗?

1 个答案:

答案 0 :(得分:3)

如果您确实接受以下列表访问您的列表:

list[ type_index ( typeid(classname) ) ]

你可以使用std :: type_index将你的类映射到一个可索引的(在std :: map等中可用)对象,你可以按如下方式声明你的std :: map

std::map< std::type_index , ... > list;

据我所知,这需要一个符合新C ++标准的编译器。