2012-12-16 30 views
2

是否有可能以某种方式在容器中使用类名作为关键字?以Classname为关键字的映射

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

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); 

它可能以某种方式?此外,是否有更好的方法解决这个问题?

回答

3

如果你接受访问你这样的名单:

list[ type_index (typeid(classname)) ] 

可以使用的std :: type_index到您的类映射到一个可转位(中的std ::地图使用等)对象和你可以声明你的std :: map如下

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

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