我注意到,如果我使用Visual Studio Express 2013 Microsoft C++做这样的事情:
namespace LogLevelEnum {
enum Type {
ALL,
FINEST,
FINE,
INFO,
WARNING,
SEVERE,
OFF
};
}
typedef LogLevelEnum::Type LogLevel;
我可以使用诸如 LogLevel::INFO
和 LogLevel::WARNING
之类的东西访问枚举项,但不能简单地执行INFO
或WARNING
。我喜欢这种方式,因为它不会将那么多符号放入包含的命名空间中。
但是,我想知道这是否是标准行为。我知道类和命名空间可以使用 ::
运算符进行索引,但考虑到它们只是转储它所在的命名空间中的所有内容,这也适用于枚举就没有那么有意义了。
但是,我想知道这是否是标准行为。
是的,前提是您使用的是符合 C++11 的编译器,并且根据标准,您指的是 C++11 标准。
但不是简单地做信息或警告。
这是因为枚举在命名空间范围内。你试过LogLevelEnum ::INFO
或LogLevelEnum ::WARNING
吗?
在不膨胀命名空间的情况下在C++中声明枚举的好方法
使用作用域枚举,即 enum struct | class
而不是enum
定义枚举。