How should I iterate over the enum class in C ++ 11?

How should I iterate over the enum class in C ++ 11? I hope that I still don't need to add the final ENUM value, but I could not get the range-based loop to work.

+7
source share
2 answers

If you really need to iterate over the enum class, and you want to avoid adding a special END character, you can define your own traits for this purpose.

template<typename E> struct EnumTraits; enum class E { V1, V2, V3 }; enum class F { X1, X2, X3 }; template<> struct EnumTraits<E> { static constexpr E LAST = E::V3; }; template<> struct EnumTraits<F> { static constexpr F LAST = F::X3; }; 

Then you can write, for example:

 EnumTraits<E>::LAST 

to get the "final" value of E. Of course, you still need to define arithmetic operations on this class.

+4
source

You can hack the processor as follows:

 #define E_INITIALIZER_LIST { E1, E2, E3, E4 } enum E E_INITIALIZER_LIST; constexpr E ALL_VALUES_OF_E[] E_INITIALIZER_LIST; 
+2
source

All Articles