8

C++11 で enum クラスをループするにはどうすればよいですか? END の最終列挙値を追加する必要がないことを願っていますが、範囲ベースのループも機能しませんでした。

4

2 に答える 2

4

本当に enum クラスをループする必要があり、特別な 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 の「最終」値を取得します。もちろん、このクラスで算術演算を定義する必要があります。

于 2012-10-03T20:20:06.903 に答える