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>
}
我在 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>
}