enum class
フィールドを基になる型に変換する方法はありますか?これは自動だと思ったが、どうやらそうではなかった。
enum class my_fields : unsigned { field = 1 };
unsigned a = my_fields::field;
その割り当てはGCCによって拒否されています。error: cannot convert 'my_fields' to 'unsigned int' in assignment
。
参考までに、このルールはで定義されてい
—
軌道上での明度レース
[C++11: 7.2/9]
ます。
@Pubby残念なことに、スコープのない「列挙型」は、すべての列挙子で外側のスコープを汚染します。悲しいかな、両方の世界のベストはありません(とにかくC ++ 14現在)。スコープを明確に入れ子にしながら、基本型に暗黙的に変換します(これは、C ++が他のクラスの継承を処理する方法と矛盾します。値または基本型を取る関数への参照)。
—
ドウェインロビンソン、
@DwayneRobinsonはい、あります。スコープ外の列挙型を構造体または(より好ましくは)名前空間内に固定します。したがって、スコープが設定され、暗黙のint変換がまだあります。(私は必ずintに変換する必要がある理由について2度考えて、より良いアプローチがあるかどうかおそらく考えます。)
—
Pharap
enum
。