我正在维护一个大型代码库,并且正在使用前向声明和 pImpl 习惯用法的组合来缩短编译时间并减少依赖关系(它工作得非常好,)
我遇到的问题是包含公共枚举的类。这些枚举不能向前声明,所以我别无选择,只能包含类头。例如:
// Foo.h
class Foo
{
public:
enum Type
{
TYPE_A,
TYPE_B,
};
...
};
// Bar.h
#include "Foo.h" // For Foo::Type
class Bar
{
public:
void someFunction(Foo::Type type);
...
};
所以,我正在寻找避免这种情况的方法,只能想到以下几点:
将类枚举移动到单独的“类型”命名空间
// FooTypes.h
namespace FooTypes
{
enum Type
{
TYPE_A,
TYPE_B,
};
}
// Bar.h
#include "FooTypes.h"
class Bar
{
public:
void someFunction(FooTypes::Type type);
...
};
使用 int 而不是枚举
// Bar.h
class Bar
{
public:
void someFunction(int type);
...
};
我错过了什么?其他人如何绕过这个限制(不能转发声明枚举。)