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