C++11 enum class 命名空间块

C++11 enum class namespace block

我在 C++11 中有一个 enum class

enum class eDays{ SUNDAY, MONDAY, /*...*/ };

enum class 为值设置命名空间,因此必须像这样使用它:

eDays::SUNDAY

我想设置一个命名空间块,这样我就不需要每次都指定命名空间,例如:

namespace eDays {
    vector<eDays> vec = { MONDAY, SUNDAY, /*...*/ };
}

而不是:

vector<eDays> vec = { eDays::MONDAY, eDays::SUNDAY, /*...*/ };

我错过了什么?

使用枚举 类,你不能。

正如本杰明·巴罗斯所说,"An enum class works like a class so eDays is not a namespace but a class name"; using directives 可能不适用。

如果你想能写成下面的,还有其他的解决办法。

std::vector<eDays> vec = { Monday, Tuesday, /*...*/  };

实际命名空间 + enum

namespace eDays
{
    enum t { Monday, Tuesday, /*...*/ };
}

实际命名空间 +(静态)常量

namespace eDays
{
    static const int Monday  = 0;
    static const int Tuesday = 1;
    // ...
}

两者都会让你写:

{
    using namespace eDays;
    std::vector<int> vec = { Monday, Tuesday, /*...*/  }; // or <t>
}