Rob*_*ert 8 c++ mapping templates types
我正在寻找一种方法来映射类型,fi有一个类Double:
class Double
{
public:
typedef double basic_type;
...
};
Run Code Online (Sandbox Code Playgroud)
我希望能够有一个类型的连铸机
typeid(TypeToObjectType<double>::type) == typeid(Double)
Run Code Online (Sandbox Code Playgroud)
任何想法如何实现这一点(通过部分专业化等)?
ice*_*ime 11
您可以通过专业化实现这一目标:
template<class T>
struct TypeToObjectType;
template<>
struct TypeToObjectType<double> {
typedef Double type;
};
Run Code Online (Sandbox Code Playgroud)
请注意,您必须为要使用的每种类型提供专门化TypeToObjectType
.宏可以在这里有所帮助:
#define SPECIALIZE_TYPETOOBJECTTYPE(ObjectType) \
template<> struct TypeToObjectType<ObjectType::basic_type> { \
typedef ObjectType type; \
};
SPECIALIZE_TYPETOOBJECTTYPE(Int)
SPECIALIZE_TYPETOOBJECTTYPE(Double)
Run Code Online (Sandbox Code Playgroud)
听起来你正在寻找这样的东西:
template<typename T>
struct TypeToObjectType;
// specialization for T=double
template<>
struct TypeToObjectType<double> {
typedef Double type;
};
Run Code Online (Sandbox Code Playgroud)
这TypeToObjectType<double>::type
是Double
您可以为其他映射添加其他专业化。