2010-12-22 5 views
7

지도 유형을 찾는 방법을 찾고 있는데, f.i. 클래스가 두 번 갖는템플릿 별 매핑 유형

class Double 
{ 
public: 
    typedef double basic_type; 
    ... 
}; 

나는 형 캐스터를 가질 수 있도록하고 싶습니다

typeid(TypeToObjectType<double>::type) == typeid(Double) 

모든 아이디어를 어떻게 달성하는 것을이 (등 부분적인 전문화를 통해) 그래서? 이 같은 뭔가를 찾고있는 것처럼

답변

9

당신은 전문화를 통해이를 달성 할 수있다 : 당신은 당신이 TypeToObjectType 작업하려는 유형 각각에 대한 전문성을 제공해야

template<class T> 
struct TypeToObjectType; 

template<> 
struct TypeToObjectType<double> { 
    typedef Double type; 
}; 

참고. 매크로는 여기에서 유용 할 수 있습니다.

#define SPECIALIZE_TYPETOOBJECTTYPE(ObjectType) \ 
    template<> struct TypeToObjectType<ObjectType::basic_type> { \ 
     typedef ObjectType type; \ 
    }; 

SPECIALIZE_TYPETOOBJECTTYPE(Int) 
SPECIALIZE_TYPETOOBJECTTYPE(Double) 
+0

감사합니다. 나는 거의 그것을 가지고있었습니다 :) 이것은 내가 원했던 것입니다. – Robert

4

는 소리 :

template<typename T> 
struct TypeToObjectType; 

// specialization for T=double  
template<> 
struct TypeToObjectType<double> { 
    typedef Double type; 
}; 

을 여기에 TypeToObjectType<double>::typeDouble하고 추가 매핑을 위해 다른 전문을 추가 할 수 있습니다.

관련 문제