c++ - 在 C++ 中通过 '::' 访问枚举值

标签 c++ enums

我有如下类:

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;
}

我想:

  1. 访问 Color 值作为 Color::Red。当使用 Car::Red 时,当类有很多枚举、子类等时,真的很难理解代码。
  2. 使用Color类型作为函数参数或返回值
  3. switch中使用变量类型Color

我知道 3 个部分解决方案:

  1. 使用嵌入式类 Color 和其中的枚举
  2. 使用嵌入式命名空间 Color 和其中的枚举
  3. 使用枚举类

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/

相关文章:

Python.Runtime.PythonException : since Python. NET 3.0 int 无法隐式转换为 Enum。使用枚举(int_value)

c++ - 打印并存储到类型类的 vector

c++ - boost::mpl::for_each 没有实例化

c - 从 C 中的 typedef 枚举获取数组,索引处的值

haskell - 是否可以使用 GHC 泛型重新实现 `Enum` 派生

hibernate - 实体类和枚举查找类之间的一对多关系

ios - 无法在 Swift 的 UITextFieldDelegate 类初始值设定项中使用 TextField

c++ - 一个类的数组中的最大对象数

c++ - std::atomic 可以安全地与 OpenMP 一起使用吗

c++ - 将 python 列表包装为 unsigned char*