2012-05-23 67 views
12

有一種特質,或者是有可能寫出一個類型特徵is_scoped_enum<T>這樣的:是否可以確定某個類型是否是範圍枚舉類型?

  • 如果T是一個範圍的列舉,is_scoped_enum<T>::valuetrue
  • 如果T是任何其他類型,is_scoped_enum<T>::value是假
+0

* scoped enum *,你的意思是C++ 11的枚舉? – Nawaz

+1

@Nawaz:範圍枚舉是在C++ 11中調用enum類的,是的。 –

+0

出於好奇,這個有什麼實際應用? – Xeo

回答

22

我想測試,如果它是一個枚舉不隱式轉換爲基本類型應該做的伎倆。

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> {}; 
+2

更好地使用'std :: underlying_type '而不是'int'。 C++ 11中的'enum class'可以基於不可轉換爲'int'的東西。 – kennytm

+0

@KennyTM好點。編輯。 –

+0

@KennyTM:什麼類型? C++ 11§7.2/ 2聲明「_enum-base_應該命名爲整型;」有沒有可轉換爲'int'的整數類型? –

相關問題