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

c++

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

struct(class)の二つの意味

結論、二つの意味がありそうでした。

・異なるenum値で同じ列挙子を用いる事を可能にする
・int値との違いを明確なものにする

少し解説

※参考
プログラミング言語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);

誰かのお役に立てば。

コメント

タイトルとURLをコピーしました