C ++“typeid”错误:常量表达式中不允许运算符

时间:2014-07-17 14:38:33

标签: c++ types enums

我是C ++的新手。我想构建一个包含类型信息和对象值的类,这就是我所做的:

#include <typeinfo>
enum My_Type {
    MyInteger = typeid(int);       //ERROR
    MyDuoble = typeid(double);     //ERROR
    MyBoolean = typeid(boolean);   //ERROR
    MyString = typeid(char *);     //ERROR
}

template <typename T>
MyClass {
    MyClass(T& Value) {
        value = Value;
        t = typeid(T);
    }

    T value;
    My_Type t;
}

这给了我一个错误&#34;当我尝试将整数分配给我的枚举类型时,不允许在常量表达式中使用此运算符

我做错了什么?

有没有更优雅的方式来实现我尝试做的事情,而不是使用typeid()?

由于

2 个答案:

答案 0 :(得分:1)

您可以使用重载函数将一组已知类型转换为整数:

int id_of_type( int    ) { return 1; }
int id_of_type( double ) { return 2; }
int id_of_type( bool   ) { return 3; }
int id_of_type( char * ) { return 4; }

基于严格编译时类型的方式是一个模板:

template< typename T > struct id_of_type_t; // template declaration

// template instantiations for each type
template<> struct id_of_type_t< int    > { static const int value = 1; };
template<> struct id_of_type_t< double > { static const int value = 2; };
template<> struct id_of_type_t< bool   > { static const int value = 3; };
template<> struct id_of_type_t< char * > { static const int value = 4; };

// helper function that is slightly prettier to use
template< typename T >
inline int id_of_type( void )
{
    return id_of_type_t< T >::value;
}

// get the id by passed value type
template< typename T > void show_id( T )
{
    cout << id_of_type_t< T >::value << endl;
}

答案 1 :(得分:0)

如果您使用的是c ++ 11,则可以为您使用的每种类型获取唯一的hash_code。 Typeid生成一个type_info对象,cppreference有一个很好的example如何使用它。