我注意到如果我使用Microsoft Visual Studio Express 2013在C ++中执行类似的操作:
namespace LogLevelEnum {
enum Type {
ALL,
FINEST,
FINE,
INFO,
WARNING,
SEVERE,
OFF
};
}
typedef LogLevelEnum::Type LogLevel;
我可以使用LogLevel::INFO
和LogLevel::WARNING
之类的内容访问枚举项,但不能只使用INFO
或WARNING
。我喜欢这种方式,因为它没有在包含的命名空间中放置那么多的符号。
然而,我想知道这是否是标准行为。我知道可以使用::
运算符对类和名称空间进行索引,但是对于枚举也没有意义,因为它们只是将所有内容转储到它所在的命名空间中。
答案 0 :(得分:4)
但是,我想知道这是否是标准行为。
是的,只要您使用的是符合C ++ 11标准的编译器,并且按照标准,您指的是C ++ 11标准。
但不是简单地做INFO或警告。
这是因为枚举在命名空间范围内。您是否尝试过LogLevelEnum ::INFO
或LogLevelEnum ::WARNING
?
在不夸大命名空间的情况下在C ++中声明枚举的好方法
在定义枚举时使用Scoped enumerations,即enum struct | class
代替enum
。