将枚举放在cpp程序中的哪个位置?

28 c++

我有一个使用枚举类型的程序.

enum Type{a,b,};


class A
{
 //use Type
};
class B
{
  // also use that Type
};
Run Code Online (Sandbox Code Playgroud)

2类位于2个不同的文件中.我应该将类型定义放在头文件中还是每个类的类定义中?

Nat*_*man 43

如果要在多个.cpp文件中使用枚举,则应将其放在每个都包含的头文件中.如果有一个公共头文件,你应该使用它,否则你也可以为这个枚举创建一个新的头文件


小智 7

您应该总是尝试在C++中限制类型的范围,因此枚举应该在类范围内声明.枚举通常在一个类中比另一个类更自然地属于 - 让我们说类A,所以你把它放在啊标题中的A声明中:

// a.h

class A {
    public:
       enum Type { a, b };
    ...
};
Run Code Online (Sandbox Code Playgroud)

现在你需要在声明B的头文件中包含ah:

// b.h
#include "a.h"

class B {
   public:
      void f( A::Type t );     // use the Type enum
   ...
};
Run Code Online (Sandbox Code Playgroud)

  • 这真的取决于情况.在类之外声明枚举没有任何内在错误,并且在许多情况下这是首选解决方案.请注意,您还应尝试限制不需要的依赖项. (5认同)
  • 在不知情的情况下,我会说将枚举与A或B放在一起会造成从一个到另一个的不必要的接口依赖.最好使A和B处于相同的依赖关系级别(包括定义常量的单独头部等),除非在类之间已经存在显式的*interface*依赖关系(而不是*implementation*依赖关系,这更容易处理). (2认同)