我正在维护一个大型代码库,并结合使用前向声明和 pImpl 习惯用法来缩短编译时间并减少依赖性(而且效果非常好,)
我遇到的问题是包含公共(public)枚举的类。这些枚举不能向前声明,所以我别无选择,只能包含类头。例如:
// 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);
...
};
我错过了什么?其他人如何绕过此限制(无法转发声明枚举。)
最佳答案
将枚举放入包含 PIMPL 的类中。
关于c++ - 前向声明类枚举问题的解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1861837/