7
我正在尋找一種方法來映射類型,f.i.有一類雙:模板類型映射
class Double
{
public:
typedef double basic_type;
...
};
我希望能夠有一個連鑄機,使
typeid(TypeToObjectType<double>::type) == typeid(Double)
任何想法如何做到這一點(通過部分特例等)?
我正在尋找一種方法來映射類型,f.i.有一類雙:模板類型映射
class Double
{
public:
typedef double basic_type;
...
};
我希望能夠有一個連鑄機,使
typeid(TypeToObjectType<double>::type) == typeid(Double)
任何想法如何做到這一點(通過部分特例等)?
您可以通過專業化實現這一目標:
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)
聽起來像是你正在尋找的東西是這樣的:
template<typename T>
struct TypeToObjectType;
// specialization for T=double
template<>
struct TypeToObjectType<double> {
typedef Double type;
};
這裏TypeToObjectType<double>::type
是Double
,你可以爲其他映射添加其他專業。
謝謝,我幾乎有它:)這正是我想要的。 – Robert 2010-12-23 07:21:49