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

09-26 22:26