按模板键入映射

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)


sth*_*sth 7

听起来你正在寻找这样的东西:

template<typename T>
struct TypeToObjectType;

// specialization for T=double    
template<>
struct TypeToObjectType<double> {
   typedef Double type;
};
Run Code Online (Sandbox Code Playgroud)

TypeToObjectType<double>::typeDouble您可以为其他映射添加其他专业化。