我有如下类:
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
类型作为函数参数或返回值 - 在
switch
中使用变量类型Color
我知道 3 个部分解决方案:
- 使用嵌入式类
Color
和其中的枚举 - 使用嵌入式命名空间
Color
和其中的枚举 - 使用
枚举类
1 和 2 解决方案解决了 Color::Red
加入问题,但我不能使用像 Color getColor()
和 void setColor(Color )
。
3 解决方案有一个问题:VS2010 不支持enum class
。 GCC v.4.1.2 也不支持它。我不知道 gcc 的更高版本。
是的,我正在做跨平台项目。
我找到了 this解决方案,但似乎...很重。
我希望有人能在这里帮助我 :)
最佳答案
在当前的 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
在旁注中,您现在定义了基础类型,这在以前只能通过骇人听闻的代码(FORCEDWORD
或其他任何人?)来实现:
enum class Color : char { Red };
关于c++ - 在 C++ 中通过 '::' 访问枚举值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10090949/