【发布时间】:2015-06-25 15:09:05
【问题描述】:
我注意到,如果我使用 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 来访问。我喜欢这种方式,因为它不会在包含的命名空间中放入尽可能多的符号。
但是,我想知道这是否是标准行为。我知道可以使用:: 运算符对类和命名空间进行索引,但考虑到它们只是将所有内容转储到它所在的命名空间中,它也适用于枚举就不太有意义了。
【问题讨论】:
-
只需使用scoped enum。
-
C++11 枚举类?
-
@chris:啊,我不知道这些。我想我会用这些。不过,我仍然想知道我所使用的行为究竟是如何定义的。
-
等一下,你用
LogLeveltypedef 实现了什么?没有它,你必须写LogLevelEnum::INFO一样,只是INFO不起作用,因为它在命名空间中。我错过了什么吗? -
“但是,我想知道这是否是标准行为。” 它最初是一个 VC++ 扩展,但在 C++11 中与作用域枚举一起合法化。
标签: c++ enums namespaces standards