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

时间:2015-04-18 19:14:38

标签: c++ enums namespaces standards

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

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

我可以使用LogLevel::INFOLogLevel::WARNING之类的内容访问枚举项,但不能只使用INFOWARNING。我喜欢这种方式,因为它没有在包含的命名空间中放置那么多的符号。

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

1 个答案:

答案 0 :(得分:4)

  

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

是的,只要您使用的是符合C ++ 11标准的编译器,并且按照标准,您指的是C ++ 11标准。

  

但不是简单地做INFO或警告。

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

  

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

在定义枚举时使用Scoped enumerations,即enum struct | class代替enum