我是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()?
由于
答案 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)