c++でenumを宣言する際に以下の様な宣言を見たことはないですか?
struct(class)の二つの意味結論、二つの意味がありそうでした。
・異なるenum値で同じ列挙子を用いる事を可能にする
・int値との違いを明確なものにする
少し解説
以下の様なコードはコンパイルは通るでしょうか?
// Test.h
enum Color
{
RED,
BLUE,
PURPLE,
};
enum TrafficLight
{
RED,
YELLOG,
GREEN
};
// Test.cpp
Color c_red = Color::RED;
TrafficLight t_red = TrafficLight::RED;
まぁ、流れ的に分かりそうですがこれは通りません。
では、どうすれば通るのでしょうか?
同名の列挙子を用いる事を可能にする
以下の様に変更すると通ります。(c++11以降)
enum struct Color
{
RED,
BLUE,
PURPLE,
};
enum struct TrafficLight
{
RED,
YELLOG,
GREEN
};
structを追加しました。
※classでも通ります。
※両方にstructを追加していますが片方だけ追加するだけで通ります。
structを追加したことにより、各列挙子のスコープが明確なものになり、ビルドが通るようになりました。
intとの相互変換
structを加えなければ実はそのまま代入が出来ます。
int red = Color::RED;
の具合ですね。
structがある場合は以下の形で相互に変換出来ます。
・int => enum値
Color enumColorRed = static_cast(0);
・enum値 => int
int intColorRed = static_cast(Color::RED);
誰かのお役に立てば。
コメント