2010-12-22 392 views
7

我正在尋找一種方法來映射類型,f.i.有一類雙:模板類型映射

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

我希望能夠有一個連鑄機,使

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

任何想法如何做到這一點(通過部分特例等)?

回答

9

您可以通過專業化實現這一目標:

template<class T> 
struct TypeToObjectType; 

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

請注意,您必須爲每個要在其上TypeToObjectType工作類型的一個特例。宏可以在這裏有所幫助:

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

SPECIALIZE_TYPETOOBJECTTYPE(Int) 
SPECIALIZE_TYPETOOBJECTTYPE(Double) 
+0

謝謝,我幾乎有它:)這正是我想要的。 – Robert 2010-12-23 07:21:49

4

聽起來像是你正在尋找的東西是這樣的:

template<typename T> 
struct TypeToObjectType; 

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

這裏TypeToObjectType<double>::typeDouble,你可以爲其他映射添加其他專業。