gpt4 book ai didi

c++ - 是否嵌套枚举类?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:41:32 25 4
gpt4 key购买 nike

一个人可以有独立的枚举类:

enum class StreamOpenMode
{
read,
write,
readWrite
};

class Stream
{
public:

Stream(StreamOpenMode openMode)
//...
};

或者将它们嵌套在另一个类中:

class Stream
{
public:

enum class OpenMode
{
read,
write,
readWrite
};

Stream(OpenMode openMode)
//...
};

选择一个而不是另一个的技术原因是什么?例如,嵌套变体不能前向声明,这可能会导致大型项目中的循环依赖问题。

最佳答案

For example, the nested variety can't be forward declared, which might lead to circular dependency issues in large projects.

公平地说,这本身可能是最强大的技术原因。

您还会发现 Argument-Dependent Lookup 依赖于共享范围:

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!)。但是,在那种情况下,成员类型别名将使将作用域枚举保留在类之外变得非常微不足道。

关于c++ - 是否嵌套枚举类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56805969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com