同じ値を持つ 2 つの異なる列挙型を作成することは可能ですか? 例えば、
enum direction{
LEFT,
RIGHT,
UP,
DOWN,
NONE
}
enum color{
RED,
GREEN,
BLUE,
NONE
}
コンパイラは、「NONE」の宣言が 2 つあると言うでしょう。これを回避する方法はありますか?
同じ値を持つ 2 つの異なる列挙型を作成することは可能ですか? 例えば、
enum direction{
LEFT,
RIGHT,
UP,
DOWN,
NONE
}
enum color{
RED,
GREEN,
BLUE,
NONE
}
コンパイラは、「NONE」の宣言が 2 つあると言うでしょう。これを回避する方法はありますか?
これにはいくつかの方法があります。1 つの方法は、名前空間を使用して列挙型をラップし、値がグローバル名前空間を汚染するのを防ぐことです。
namespace direction {
enum direction {
LEFT,
RIGHT,
UP,
DOWN,
NONE
};
}
namespace color {
enum color {
RED,
GREEN,
BLUE,
NONE
};
}
新しい C++11 の方法 (コンパイラがサポートしている場合) を使用して、「厳密に型指定された列挙型」を使用することもできます。
enum class direction {
LEFT,
RIGHT,
UP,
DOWN,
NONE
};
enum class color {
RED,
GREEN,
BLUE,
NONE
};
direction::NONE
どちらも構文orで使用できますが、color::NONE
大きな違いが 1 つあります。最初のケースでは、列挙型は暗黙のうちに int にキャストされます。これは、あなたが書くことができることを意味します
int foo = direction::NONE;
そしてすべてが順調です。
2 番目のケースでは、foo が direction と同じ型ではないため、これはコンパイラ エラーになります。あなたはこれを回避することができます
direction foo = direction::NONE;
あなたのために働くかもしれないし、働かないかもしれません。int にキャストする必要がある場合はstatic_cast<int>(foo)
、整数型を取得するために使用できます。