私は大規模なコードベースを維持しており、前方宣言と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);
...
};
だから、私はこれを回避する方法を探しており、次のことしか考えられません:
クラス列挙を別の「types」名前空間に移動します
// 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);
...
};
私は何を逃しましたか?他の人はこの制限をどのように回避しますか(列挙を前方宣言することはできません)。