我正在寻找一种映射类型的方法参加Double课:
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)