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

Xav*_*ier 8 c++ enums c++11

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

wit*_*osx 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; };
Run Code Online (Sandbox Code Playgroud)

然后你可以写例如:

EnumTraits<E>::LAST 
Run Code Online (Sandbox Code Playgroud)

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

  • 当然,这假设枚举从 0 开始并且不跳过任何中间值。 (5认同)
  • @KevinBallard:...在很多很多情况下不太可能出现这种情况。 (2认同)