在不膨胀命名空间的情况下在 C++ 中声明枚举的好方法

Nice way to declare enums in C++ without bloating the namespace

我注意到如果我使用 Microsoft Visual Studio Express 2013 在 C++ 中执行类似的操作:

namespace LogLevelEnum {
enum Type {
    ALL,
    FINEST,
    FINE,
    INFO,
    WARNING,
    SEVERE,
    OFF
};
}
typedef LogLevelEnum::Type LogLevel;

我可以使用 LogLevel::INFOLogLevel::WARNING 之类的东西访问 enum 项,但不能简单地执行 INFO 或 [=14] =].我喜欢这样,因为它不会将尽可能多的符号放入包含的命名空间中。

但是,我想知道这是否是标准行为。我知道 类 并且命名空间可以使用 :: 运算符进行索引,但是考虑到它们只是将所有内容都转储到它所在的命名空间中,所以它也适用于枚举意义不大。

However, I was wondering whether or not this is standard behaviour.

是的,前提是您使用的是 C++11 兼容编译器,并且按照标准,您指的是 C++11 标准。

but not by simply doing INFO or WARNING.

这是因为枚举在命名空间范围内。您是否尝试过 LogLevelEnum ::INFOLogLevelEnum ::WARNING

Nice way to declare enums in C++ without bloating the namespace

在定义枚举时使用 Scoped enumerationsenum struct | class 而不是 enum