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

RPF*_*ltz 5 c++ standards enums namespaces

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

namespace LogLevelEnum {
enum Type {
    ALL,
    FINEST,
    FINE,
    INFO,
    WARNING,
    SEVERE,
    OFF
};
}
typedef LogLevelEnum::Type LogLevel;
Run Code Online (Sandbox Code Playgroud)

我可以访问枚举喜欢使用的东西的物品LogLevel::INFOLogLevel::WARNING,而不是简单地做INFOWARNING.我喜欢这种方式,因为它没有在包含的命名空间中放置尽可能多的符号.

但是,我想知道这是否是标准行为.我知道可以使用::运算符对类和名称空间进行索引,但是对于枚举也是如此,因为它们只是将所有内容转储到它所在的命名空间中.

Abh*_*jit 4

但是,我想知道这是否是标准行为。

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

但不是简单地执行“信息”或“警告”。

这是因为枚举位于命名空间范围内。你尝试过LogLevelEnum ::INFO或者吗LogLevelEnum ::WARNING

在 C++ 中声明枚举而不会使命名空间膨胀的好方法

使用范围枚举,即enum struct | class而不是enum在定义枚举时使用。