gpt4 book ai didi

C++ "typeid"错误 : operator not allowed in a constant expression

转载 作者:行者123 更新时间:2023-11-28 06:46:57 26 4
gpt4 key购买 nike

我是 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;
}

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

我做错了什么?

有没有比使用 typeid() 更优雅的方法来实现我想要做的事情?

谢谢

最佳答案

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

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;
}

关于C++ "typeid"错误 : operator not allowed in a constant expression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24806526/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com