有没有办法转换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
.
我想你可以使用std::underlying_type了解底层类型,然后使用强制转换:
#include <type_traits> //for std::underlying_type
typedef std::underlying_type<my_fields>::type utype;
utype a = static_cast<utype>(my_fields::field);
有了这个,你不必assume底层类型,或者您不必在定义中提及它enum class
like enum class my_fields : int { .... }
or so.
你甚至可以写一个generic应该能够转换的转换函数any enum class
对其底层的integral type:
template<typename E>
constexpr auto to_integral(E e) -> typename std::underlying_type<E>::type
{
return static_cast<typename std::underlying_type<E>::type>(e);
}
然后使用它:
auto value = to_integral(my_fields::field);
auto redValue = to_integral(Color::Red);//where Color is an enum class!
由于该函数被声明为constexpr
,您可以在需要常量表达式的地方使用它:
int a[to_integral(my_fields::field)]; //declaring an array
std::array<int, to_integral(my_fields::field)> b; //better!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)