【发布时间】:2009-12-07 18:10:43
【问题描述】:
我正在维护一个大型代码库,并使用前向声明和 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);
...
};
我错过了什么?其他人如何绕过这个限制(无法转发声明枚举。)
【问题讨论】:
标签: c++ enums pimpl-idiom