私は通常、ヘッダーを含める必要がないように、ほとんど何も考えずに前方宣言を使用します。この例に沿った何か:
//-----------------------
// foo.h
//-----------------------
class foo
{
foo();
~foo();
};
//-----------------------
// bar.h
//-----------------------
class foo; // forward declaration
class bar
{
bar();
~bar();
foo* foo_pointer;
};
一部の開発者は、インクルージョン サークルの問題を回避するためにこの方法を使用することを好みます。むしろ、物理設計の重要な部分である大規模な包含階層のオーバーヘッドを最小限に抑えるために使用します (特に大規模なプロジェクトの場合)。
ただし、場合によっては、メンバーをポインターではなく通常のオブジェクトとして宣言して、自動構築/破棄メカニズムの恩恵を受けることができます。これは、コンパイラがそのような場合にクラス定義を必要とするため、前方宣言を使用できなくなるという問題につながります。
//-----------------------
// foo.h
//-----------------------
class foo
{
foo();
~foo();
};
//-----------------------
// bar.h
//-----------------------
class foo; // Not enough given the way we declare "foo_object"..
#include "foo.h" // ..instead this is required
class bar
{
bar();
~bar();
foo foo_object;
};
したがって、ここで使用できる代替言語構造を誰かが知っていれば、例に示されているように「foo_object」を宣言できますが、そのヘッダーは含まれません。
よろしく
/ロバート