отображение типов по шаблонам - PullRequest
8 голосов
/ 22 декабря 2010

Я ищу способ отображения типов, например, с классом Double:

class Double 
{
public:
    typedef double basic_type;
    ...
};

Я бы хотел иметь заклинателя типов, чтобы

typeid(TypeToObjectType<double>::type) == typeid(Double)

Есть идеи, как этого добиться (посредством частичной специализации и т. Д.)?

Ответы [ 2 ]

10 голосов
/ 22 декабря 2010

Этого можно добиться с помощью специализации:

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)
4 голосов
/ 22 декабря 2010

Похоже, вы ищете что-то вроде этого:

template<typename T>
struct TypeToObjectType;

// specialization for T=double    
template<>
struct TypeToObjectType<double> {
   typedef Double type;
};

Здесь TypeToObjectType<double>::type равно Double, и вы можете добавить другие специализации для дополнительных сопоставлений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...