[解決済み】enumを繰り返し処理する方法は?
2022-03-25 19:44:38
質問
今気づいたのですが、enum に対して ++ や += のような標準的な数学演算子は使えません。
では、C++のenumに含まれるすべての値を反復処理するための最良の方法は何でしょうか?
どのように解決するのですか?
代表的な方法は以下の通りです。
enum Foo {
One,
Two,
Three,
Last
};
for ( int fooInt = One; fooInt != Last; fooInt++ )
{
Foo foo = static_cast<Foo>(fooInt);
// ...
}
なお、enum
Last
は反復処理でスキップされることを意味します。この "fake" を利用する。
Last
enum を追加するたびに、for ループの終了条件を最後の "real" enum に更新する必要がありません。
もし、後でさらに列挙型を追加したい場合は、Last の前に追加すればよいだけです。この例では、ループはまだ動作します。
もちろん、enumの値が指定されている場合は、これが崩れる。
enum Foo {
One = 1,
Two = 9,
Three = 4,
Last
};
これは、enumが実際には反復処理するためのものではないことを表しています。enumを扱う典型的な方法は、switch文の中で使用することです。
switch ( foo )
{
case One:
// ..
break;
case Two: // intentional fall-through
case Three:
// ..
break;
case Four:
// ..
break;
default:
assert( ! "Invalid Foo enum value" );
break;
}
どうしても列挙したい場合は、enumの値をvectorに詰め込んで、それを反復処理します。そうすれば、指定されたenum値も適切に処理される。
関連
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み] Java enumのメンバーを比較する:==またはequals()?
-
[解決済み] enumを列挙するには
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] Javaで文字列値からenum値を取得する方法
-
[解決済み] C#でenumからint値を取得する
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] Javaでenumを繰り返し処理するためのforループ
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】識別子 "string "は未定義?
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み】強型enumをintに自動変換する方法は?