C++ 11枚举类命名空间块

igo*_*gor 0 c++ namespaces c++11 enum-class

我有一个enum classC++ 11:

enum class eDays{ SUNDAY, MONDAY, /*...*/ };
Run Code Online (Sandbox Code Playgroud)

在enum class这些值的命名空间,以便它有套使用,如:

eDays::SUNDAY
Run Code Online (Sandbox Code Playgroud)

我想设置一个名称空间块,所以我不需要每次都指定名称空间:

namespace eDays {
    vector<eDays> vec = { MONDAY, SUNDAY, /*...*/ };
}
Run Code Online (Sandbox Code Playgroud)

代替:

vector<eDays> vec = { eDays::MONDAY, eDays::SUNDAY, /*...*/ };
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

YSC*_*YSC 5

使用枚举类,你不能.

正如本杰明·巴罗斯(Benjamin Barrois)所说的那样,"一个枚举类就像一个类一样工作,所以eDays不是命名空间而是类名"; 使用指令可能不适用.

如果您希望能够编写以下内容,还有其他解决方案.

std::vector<eDays> vec = { Monday, Tuesday, /*...*/  };
Run Code Online (Sandbox Code Playgroud)

实际命名空间+ enum

namespace eDays
{
    enum t { Monday, Tuesday, /*...*/ };
}
Run Code Online (Sandbox Code Playgroud)

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

namespace eDays
{
    static const int Monday  = 0;
    static const int Tuesday = 1;
    // ...
}
Run Code Online (Sandbox Code Playgroud)

两者都会让你写:

{
    using namespace eDays;
    std::vector<int> vec = { Monday, Tuesday, /*...*/  }; // or <t>
}
Run Code Online (Sandbox Code Playgroud)