在不膨胀命名空间的情况下在 C++ 中声明枚举的好方法
Nice way to declare enums in C++ without bloating the namespace
我注意到如果我使用 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
之类的东西访问 enum 项,但不能简单地执行 INFO
或 [=14] =].我喜欢这样,因为它不会将尽可能多的符号放入包含的命名空间中。
但是,我想知道这是否是标准行为。我知道 类 并且命名空间可以使用 ::
运算符进行索引,但是考虑到它们只是将所有内容都转储到它所在的命名空间中,所以它也适用于枚举意义不大。
However, I was wondering whether or not this is standard behaviour.
是的,前提是您使用的是 C++11 兼容编译器,并且按照标准,您指的是 C++11 标准。
but not by simply doing INFO or WARNING.
这是因为枚举在命名空间范围内。您是否尝试过 LogLevelEnum ::INFO
或 LogLevelEnum ::WARNING
?
Nice way to declare enums in C++ without bloating the namespace
在定义枚举时使用 Scoped enumerations 即 enum struct | class
而不是 enum
。
我注意到如果我使用 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
之类的东西访问 enum 项,但不能简单地执行 INFO
或 [=14] =].我喜欢这样,因为它不会将尽可能多的符号放入包含的命名空间中。
但是,我想知道这是否是标准行为。我知道 类 并且命名空间可以使用 ::
运算符进行索引,但是考虑到它们只是将所有内容都转储到它所在的命名空间中,所以它也适用于枚举意义不大。
However, I was wondering whether or not this is standard behaviour.
是的,前提是您使用的是 C++11 兼容编译器,并且按照标准,您指的是 C++11 标准。
but not by simply doing INFO or WARNING.
这是因为枚举在命名空间范围内。您是否尝试过 LogLevelEnum ::INFO
或 LogLevelEnum ::WARNING
?
Nice way to declare enums in C++ without bloating the namespace
在定义枚举时使用 Scoped enumerations 即 enum struct | class
而不是 enum
。