在不膨胀命名空间的情况下在C++中声明枚举的好方法
Nice way to declare enums in C++ without bloating the namespace
我注意到,如果我使用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
定义枚举。
相关文章:
- 访问在 C++ 结构中声明的枚举变量
- 如何使用默认值将枚举声明为 extern
- 如何转发声明枚举?
- 如何将枚举类转发声明为模板化类的内部类?
- 枚举前向声明与头文件
- C++:如何在声明枚举类的模板类主体之外定义枚举类?
- 在C++代码中使用的 C 标头中向前声明枚举
- 在哪里声明枚举
- 在模板参数内向前声明枚举类
- 在C++14中,在哪个作用域中声明了重新声明枚举的非范围枚举器
- 在C中定义的C++中正向声明枚举
- 在不膨胀命名空间的情况下在C++中声明枚举的好方法
- 声明枚举标识符的基础类型
- 为什么在向前声明枚举时必须提供枚举的大小?
- 前向声明枚举类不起作用
- 在运行时有条件地声明枚举(C++)
- 我可以传递前向声明枚举的值吗?
- c++ -对声明枚举感到困惑
- c++:在类内部从外部声明枚举器,以便可以在私有成员中使用
- 在声明枚举之前使用它