2012-05-23 9 views
12

Czy istnieje cecha typ, czy jest to możliwe, aby napisać typu cechę is_scoped_enum<T> takie, że:Czy można określić, czy typ jest typem wyliczenia o określonym zakresie?

  • jeśli T jest lunetą wyliczenie, is_scoped_enum<T>::value jest true i
  • jeśli T jest innego typu, is_scoped_enum<T>::value jest false
+0

Przez * scoped enum *, miałeś na myśli wyliczenie C++ 11? – Nawaz

+1

@Nawaz: Wykreślona enum to nazwa "klasy enum" w C++ 11, tak. –

+0

Po prostu z ciekawości, jakie są praktyczne zastosowania tej aplikacji? – Xeo

Odpowiedz

22

myślę testowania, czy jest to enum i nie niejawnie zamienny do bazowego typu powinno załatwić sprawę.

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

Lepiej użyj 'std :: underlying_type ' zamiast 'int'. "Klasa enum" w C++ 11 może bazować na czymś, czego nie można zamienić na "int". – kennytm

+0

@KennyTM dobry punkt. Edytowane. –

+0

@KennyTM: Jaki typ? C++ 11 §7.2/2 stwierdza: "_enum-base_ powinno wskazywać typ integralny;" czy istnieje typ integralny, którego nie można przekształcić w 'int'? –

Powiązane problemy