我的课程如下:
class Car
{
public:
Car();
// Some functions and members and <b>enums</b>
enum Color
{
Red,
Blue,
Black
};
Color getColor();
void setColor(Color);
private:
Color myColor;
}
我想:
Color
值视为Color::Red
。当使用Car::Red
时,当类有很多枚举,子类等时,很难理解代码。Color
作为函数参数或返回值Color
switch
醇>
我知道3个部分解决方案:
Color
并在其中加入Color
并在其中枚举enum class
1和2解决方案解决了Color::Red
加入问题,但我无法使用Color getColor()
和void setColor(Color)
等函数。
3解决方案有问题:VS2010不支持enum class
。 GCC v.4.1.2也不支持它。我不知道更高版本的gcc。
是的,我正在开展跨平台项目 我找到了this解决方案,但似乎......很重 我希望有人可以在这里帮助我:)。
答案 0 :(得分:17)
在当前的C ++(即C ++ 11及更高版本)中,你可以已经访问这样的枚举值:
enum Color { Red };
Color c = Color::Red;
Color d = Red;
您可以进一步强制使用此表示法:
enum class Color { Red };
Color c = Color::Red;
// Color d = Red; <-- error now
在旁注中,您现在定义了基础类型,以前只能使用hacky代码(FORCEDWORD
左右任何人?):
enum class Color : char { Red };
答案 1 :(得分:7)
在嵌套类中命名枚举(例如一个):
class Car
{
public:
struct Color
{
enum Type
{
Red,
Blue,
Black
};
};
Color::Type getColor();
void setColor(Color::Type);
};
答案 2 :(得分:5)
当我想做这样的事情时,我倾向于使用命名空间和命名空间之外的typedef(尽管我通常是全局而不是在类中)。像这样:
namespace colors
{
enum Color
{
Red,
Blue
...
}
}
typedef colors::Color Color;
这样您可以使用命名空间来获取实际颜色,但Color
类型本身仍可全局访问:
Color myFav = colors::Red;