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



我注意到,如果我使用Visual Studio Express 2013 Microsoft C++做这样的事情:

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

我可以使用诸如 LogLevel::INFOLogLevel::WARNING 之类的东西访问枚举项,但不能简单地执行INFOWARNING。我喜欢这种方式,因为它不会将那么多符号放入包含的命名空间中。

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

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

是的,前提是您使用的是符合 C++11 的编译器,并且根据标准,您指的是 C++11 标准。

但不是简单地做信息或警告。

这是因为枚举在命名空间范围内。你试过LogLevelEnum ::INFOLogLevelEnum ::WARNING吗?

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

使用作用域枚举,即 enum struct | class而不是enum定义枚举。

最新更新