我应该如何在C ++ 11中循环枚举类?

时间:2012-10-03 19:49:01

标签: c++ enums c++11

我应该如何在C ++ 11中循环枚举类?我希望我仍然不必添加END的最终枚举值,但我无法使基于范围的循环工作。

2 个答案:

答案 0 :(得分:4)

如果你真的需要遍历枚举类并且你想避免添加特殊的END符号,你可以为此目的定义自己的特征。

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; };

然后你可以写例如:

EnumTraits<E>::LAST 

获得E的“最终”值 当然,您仍需要在此类上定义算术运算。

答案 1 :(得分:2)

你可以像这样处理黑客:

#define E_INITIALIZER_LIST { E1, E2, E3, E4 }

enum E E_INITIALIZER_LIST;
constexpr E ALL_VALUES_OF_E[] E_INITIALIZER_LIST;