是否巢枚举课
Nest enum class or not?
一个人可以拥有独立的枚举类:
enum class StreamOpenMode
{
read,
write,
readWrite
};
class Stream
{
public:
Stream(StreamOpenMode openMode)
//...
};
或将它们嵌套在另一类中:
class Stream
{
public:
enum class OpenMode
{
read,
write,
readWrite
};
Stream(OpenMode openMode)
//...
};
选择一个技术原因是什么?例如,嵌套的品种无法正向声明,这可能会导致大型项目中的循环依赖性问题。
例如,嵌套的品种无法正向声明,这可能会导致大型项目中的循环依赖问题。
公平地说,这本身就是最强大的技术原因。
您还会发现与参数有关的查找依赖于共享范围:
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
的类的整个类别,每个类别都有自己的相似但不同的范围。将其作为成员使其更容易从模板的上下文(T::OpenMode
!(中使用所述范围的枚举。但是,在这种情况下,成员类型的别名将使将范围的枚举保持在班级外。
相关文章:
- 是否有 Windows 用户空间函数来枚举连接的网络共享?
- C++17:使用 std::optional 来评估枚举是否包含值
- 使用枚举为数组编制索引是否安全?
- 是否可以在C++变量中保存多种类型的枚举?
- 是否可以确定枚举是否为强类型?
- 是否可以使用泛型枚举类型作为函数的参数?
- 是否可以基于私有/受保护成员分配类枚举?
- 如何检查类中定义的枚举类型变量是否被分配给?
- 表达式中使用的枚举器是否与其枚举的基础类型具有相同的类型?
- 是否巢枚举课
- 将指向类型化/大小的枚举的指针转换为指向基础类型的指针是否安全?
- 是否可以使用 static_cast 从可变参数枚举创建 boost::mpl::list_c
- 枚举是否可以在C++中减小到其位大小
- C++枚举是否可以大于 64 位?
- 新的类型安全枚举是否定义为从 0 开始
- 虚拟方法返回代表派生对象类型的枚举 - 是否可以(在设计方面)
- POD 类中的嵌套枚举是否使它不是 POD
- 无作用域枚举是否仍然有用
- 此枚举是否有效,如果有效,为什么
- 枚举是否应该从dll中导出