Вопрос по c++, c++11 – Можно ли определить, является ли тип перечисляемым типом?

14

Есть ли черта типа или можно написать черту типаis_scoped_enum<T> такой что:

if T is a scoped enumeration, is_scoped_enum<T>::value is true and if T is any other type, is_scoped_enum<T>::value is false
Просто из любопытства, какие практические применения есть для этого? Xeo
@Nawaz: enum с областью видимости - это то, чтоenum class вызывается в C ++ 11, да. James McNellis
@Xeo: я перегружаю побитовые операторы для набора перечисляемых типов. James McNellis
Отscoped enumВы имели в виду перечисление C ++ 11? Nawaz

Ваш Ответ

1   ответ
25

Я думаю, что тестирование, если это перечислениеand неявно преобразуемый в базовый тип должен делать свое дело.

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> {};
@JamesMcNellis: Вы правы. Извините за недопонимание. (Я думал оis_convertible делать неявное преобразование.)
Это хорошее решение, за исключением того, что с последним редактированием логика теперь обратная:::value верно, еслиT перечисление с незаданной областью. :-) James McNellis
@KennyTM: какой тип? C ++ 11 "7.2 / 2 состояния"enum-base должен назвать целочисленный тип; & quot; есть ли целочисленный тип, не преобразуемый вint? James McNellis
Лучше использоватьstd::underlying_type<T> вместоint,enum class в C ++ 11 может основываться на чем-то не конвертируемом вint.
@KennyTM хорошая мысль. Ред.

Похожие вопросы