c++ - 命名空间中的枚举

标签 c++ enums namespaces c++11

这样做有没有意义:

namespace status{
  enum status{
    ok,
    error
  };
}

并像那样使用它 status::ok

或者我应该这样做:

enum status{
  status_ok,
  status_error
};

并像这样使用它status_ok

更新: 使用 C++11,您现在应该这样做:

enum class status {
    ok,
    error
};

并像这样使用:status::ok

最佳答案

我个人不喜欢第二种变体,因为 status_ 部分对我来说似乎是多余的。以前的版本避免了这个问题,但是有一个类型 status::status 看起来也很奇怪。此外,命名空间可以修改,所以如果有人做了类似的事情

namespace status {
  void error( const char *msg );
}

你会得到一个编译器错误,因为函数 error 与你的 enum 值冲突。

我更喜欢使用第三种变体:

struct MouseButton {
  enum Value {
    Left, Middle, Right
  };
};

这让我可以编写类似的函数

void handleMouseButton( MouseButton::Value b ) {
  switch ( b ) {
    case MouseButton::Left:   // ...
    case MouseButton::Middle: // ...
    case MouseButton::Right:  // ...
  }
}

关于c++ - 命名空间中的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7090130/

相关文章:

c++ - 为什么我必须将原始图像数据的宽度除以 3?

javascript - "var FOO = FOO || {}"(将变量或空对象分配给该变量)在 Javascript 中意味着什么?

c++ - 跨命名空间重载函数是否一定很困难?

c++ - 初学者 C++ 程序中的分数组件

c++ - 右值到左值的转换 Visual Studio

java - 从第 5 版开始, 'enum' 是关键字,不能用作标识符

php从下拉列表中插入查询枚举作为字符串

通用枚举到int的C#非装箱转换?

javascript - 在 JSON block 中声明对象及其原型(prototype)

clojure 命名空间 .core 文件和 repl