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

RPFeltz

我注意到,如果我使用Microsoft Visual Studio Express 2013在C ++中执行以下操作:

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

我可以使用诸如和之类的东西来访问枚举,但不能仅仅通过or来进行我之所以喜欢它,是因为它不会在包围的名称空间中放置太多符号。LogLevel::INFOLogLevel::WARNINGINFOWARNING

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

阿比吉特

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

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

但不能仅通过执行INFO或WARNING来完成。

这是因为枚举在名称空间范围内。您尝试过LogLevelEnum ::INFO还是LogLevelEnum ::WARNING

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章