有一種特質,或者是有可能寫出一個類型特徵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