我有以下课程:
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;
}
Run Code Online (Sandbox Code Playgroud)
我想要:
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.
是的,我正在从事跨平台项目.
我找到了这个解决方案,但似乎......很重.
我希望有人可以帮助我:)
Seb*_*ach 17
在当前的C++(即C++ 11及更高版本)中,您已经可以访问这样的枚举值:
enum Color { Red };
Color c = Color::Red;
Color d = Red;
Run Code Online (Sandbox Code Playgroud)
您可以进一步强制使用此表示法:
enum class Color { Red };
Color c = Color::Red;
// Color d = Red; <-- error now
Run Code Online (Sandbox Code Playgroud)
在旁注中,您现在定义基础类型,以前只能使用hacky代码(FORCEDWORD或者任何人?):
enum class Color : char { Red };
Run Code Online (Sandbox Code Playgroud)
在嵌套类中命名枚举(例如一个):
class Car
{
public:
struct Color
{
enum Type
{
Red,
Blue,
Black
};
};
Color::Type getColor();
void setColor(Color::Type);
};
Run Code Online (Sandbox Code Playgroud)
当我想做这样的事情时,我倾向于使用命名空间和命名空间之外的typedef(虽然我通常是全局而不是在类中).像这样的东西:
namespace colors
{
enum Color
{
Red,
Blue
...
}
}
typedef colors::Color Color;
Run Code Online (Sandbox Code Playgroud)
这样您可以使用命名空间来获取实际颜色,但Color类型本身仍可全局访问:
Color myFav = colors::Red;
Run Code Online (Sandbox Code Playgroud)