我应该如何在C++11中循环枚举类? 我希望我不必仍然添加一个最终枚举值END,但我也无法让基于范围的循环正常工作。
如果你真的需要遍历枚举类并且想要避免添加特殊的END符号,你可以为此定义自己的 traits。
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的“最终”值。 当然,您仍需要在此类上定义算术操作。
#define E_INITIALIZER_LIST { E1, E2, E3, E4 }
enum E E_INITIALIZER_LIST;
constexpr E ALL_VALUES_OF_E[] E_INITIALIZER_LIST;
SENTINEL_VALUE
,将列表放入圆括号中等等。 - Potatoswatter
enum
不是一个容器,因此“循环”它没有意义。无论如何,可以在这里查看算术部分的一些示例代码,你可以使用它们作为参考:https://bitbucket.org/martinhofernandes/wheels/src/c8e1b8979492/include/wheels/enums.h%2B%2B - Xeo