C++で重複した列挙型名の定義
CやレガシC++ではEnum名の重複は許されていませんが、C++11で導入されたスコープあり (Scoped) Enum型では名前の重複が可能です
例として以下のコードはコンパイルエラーになります (C++11以降でも)
enum Car { red = 1, green = 2, blue = 3 };
enum Bike { red = 1, green = 2, blue = 3 }; // Error! 重複
スコープありEnumとしたい場合はclass
またはstruct
をenum
の後に付加します (ここではclass
/struct
は同じ意味)
enum class NewCar { red = 5, green = 6, blue = 7 };
enum class Bike { red = 8, green = 9, blue = 10 }; // OK! : 重複も可能
スコープなしEnumの名前は省略可能ですが、スコープありの場合は参照時に必要となるため必須です。参照は<Enum名>::<要素名>
の形です
constexpr const char* NewCar2Str(NewCar val) {
switch (val) {
case NewCar::red:
return "red";
case NewCar::green:
return "green";
case NewCar::blue:
return "blue";
}
return "unknown";
}
最近のコメント