2012-12-16 5 views
2

어떻게 든 클래스 이름을 컨테이너의 키로 사용할 수 있습니까?클래스 이름을 키로 사용하여 매핑

동일한베이스에서 상속 된 클래스의 객체를 저장하고 싶습니다.

struct storage {}; 

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

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

중첩 된지도가 있습니다. ...storagetransform 또는 storageform과 같은 특정 클래스 이름을 유형 또는 문자열 등으로 채워야합니다.

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

다음과 같이 컨테이너의 개체에 액세스하려고합니다.

list[storagetransform](1337); 

어떻게 든 가능합니까? 또한이 문제에 대한 더 나은 접근법이 있습니까?

답변

3

이 같은 목록에 액세스하는 데 동의 경우 : 당신이 색인에 (표준 : :지도에서 사용할 수 등) 객체 클래스를 매핑 표준 : type_index을 사용할 수 있습니다

list[ type_index (typeid(classname)) ] 

및 나는이 새로운 C++ 표준을 준수하는 컴파일러를 필요로 기억으로 지금까지

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

를 다음과 같이 당신은 당신의 표준 : :지도를 선언 할 수 있습니다.

관련 문제