1. ホーム
  2. c++

[解決済み】強型enumをintに自動変換する方法は?

2022-04-08 13:47:46

質問

#include <iostream>

struct a {
  enum LOCAL_A { A1, A2 };
};
enum class b { B1, B2 };

int foo(int input) { return input; }

int main(void) {
  std::cout << foo(a::A1) << std::endl;
  std::cout << foo(static_cast<int>(b::B2)) << std::endl;
}

a::LOCAL_A 通常の列挙型は整数型に変換できますが、強く型付けされた列挙型はキャストしないと変換できません。

では、強く型付けされたenum値をキャストせずに整数型に変換する方法はあるのでしょうか?もしあるならば、どのように?

どのように解決するのですか?

強い型付けされた列挙型は、質問にあるようなスコーピングの問題だけでなく、複数の問題を解決することを目的としています。

  1. 型安全性を提供し、積分プロモーションによる整数への暗黙の変換をなくす。
  2. 基礎となる型を指定する。
  3. 強力なスコープを提供する。

したがって、強く型付けされたenumを暗黙のうちに整数型に変換することは不可能であり、その基礎となる型さえも変換できない--というのがその考えです。そのため static_cast を使用して、変換を明示的に行うことができます。

もし、スコープだけが問題で、暗黙のうちに整数に昇格させたいのであれば、強く型付けされた enum ではなく、宣言された構造体をスコープとするものを使う方がよいでしょう。