一个可以有独立的枚举类:
enum class StreamOpenMode
{
read,
write,
readWrite
};
class Stream
{
public:
Stream(StreamOpenMode openMode)
//...
};
或将它们嵌套在另一个类中:
class Stream
{
public:
enum class OpenMode
{
read,
write,
readWrite
};
Stream(OpenMode openMode)
//...
};
选择其中一项的技术原因是什么? 例如,不能预先声明嵌套的品种,这可能导致大型项目中的循环依赖问题。
答案 0 :(得分:5)
例如,不能预先声明嵌套的品种,这可能导致大型项目中的循环依赖问题。
说句公道话,这本身可能是最强烈的技术原因。
您还将发现依赖于参数的查找依赖于共享范围:
namespace N
{
struct A
{
enum class B { aB };
friend void f(B);
};
}
void test(N::A::B x)
{
f(x); // f found by ADL, since x's type is a member of A
}
一个不同的示例可以演示类似于Stream
的类的整个 suite ,每个类都有自己的相似但不同的作用域枚举。将其作为成员可以更轻松地从模板(T::OpenMode
!的上下文中使用所述范围枚举。但是,在这种情况下,成员类型别名会使将枚举范围的枚举保留在类之外非常简单。