有一种特质,或者是有可能写出一个类型特征is_scoped_enum<T>
这样的:是否可以确定某个类型是否是范围枚举类型?
- 如果
T
是一个范围的列举,is_scoped_enum<T>::value
是true
和 - 如果
T
是任何其他类型,is_scoped_enum<T>::value
是假
有一种特质,或者是有可能写出一个类型特征is_scoped_enum<T>
这样的:是否可以确定某个类型是否是范围枚举类型?
T
是一个范围的列举,is_scoped_enum<T>::value
是true
和T
是任何其他类型,is_scoped_enum<T>::value
是假我想测试,如果它是一个枚举和不隐式转换为基本类型应该做的伎俩。
template <typename T, bool B = std::is_enum<T>::value>
struct is_scoped_enum : std::false_type {};
template <typename T>
struct is_scoped_enum<T, true>
: std::integral_constant<bool,
!std::is_convertible<T, typename std::underlying_type<T>::type>::value> {};
更好地使用'std :: underlying_type
@KennyTM好点。编辑。 –
@KennyTM:什么类型? C++ 11§7.2/ 2声明“_enum-base_应该命名为整型;”有没有可转换为'int'的整数类型? –
* scoped enum *,你的意思是C++ 11的枚举? – Nawaz
@Nawaz:范围枚举是在C++ 11中调用enum类的,是的。 –
出于好奇,这个有什么实际应用? – Xeo