【c++】enum struct(class)とは

c++でenumを宣言する際に以下の様な宣言を見たことはないですか?


プログラミング言語C++第4版

以下の様なコードはコンパイルは通るでしょうか?

// Test.h
enum Color
{
    RED,
    BLUE,
    PURPLE,
};
enum TrafficLight
{
    RED,
    YELLOG,
    GREEN
};

// Test.cpp
Color c_red = Color::RED;
TrafficLight t_red = TrafficLight::RED;

まぁ、流れ的に分かりそうですがこれは通りません。

redefinition_enum_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);

誰かのお役に立てば。

[sc:link_cocos]

[sc:ad_banner]