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

Nice way to declare enums in C++ without bloating the namespace

本文关键字:声明 枚举 方法 情况下 膨胀 命名空间 C++      更新时间:2023-10-16

我注意到,如果我使用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定义枚举。