有没有办法将 enum class
字段转换为基础类型?我认为这将是自动的,但显然不是。
enum class my_fields : unsigned { field = 1 };
unsigned a = my_fields::field;
GCC 拒绝了该分配。 error: cannot convert 'my_fields' to 'unsigned int' in assignment
。
原文由 edA-qa mort-ora-y 发布,翻译遵循 CC BY-SA 4.0 许可协议
我认为您可以使用 std::underlying_type 来了解基础类型,然后使用强制转换:
有了这个,您不必 假设 基础类型,或者您不必在
enum class
的定义中提及它,例如enum class my_fields : int { .... }
左右。您甚至可以编写一个 通用 转换函数,该函数应该能够将 任何
enum class
转换为其基础 整数 类型:然后使用它:
由于该函数被声明为
constexpr
,因此您可以在需要常量表达式的地方使用它: