すべてをヘッダーのみにする代わりにソース ファイルを使用する場合、C++ のヘッドのみのライブラリで循環依存関係の問題が発生します。これは循環依存の問題ではありません。
状況は次のようになります。
A と B の 2 つのクラスに対して 4 つのファイルがあります。すべてのクラスには、ヘッダー ファイル ("A.hpp" など) と実装ファイル ("A.tpp" など) があります。
依存関係は次のとおりです。
- A のヘッダーには B' ヘッダーが必要です
- A の impl には B のヘッダーが必要です
- B のヘッダーには、A への前方宣言のみが必要です。
- B の impl には A のヘッダーが必要です
したがって、ソースベースのライブラリでは、次のソース ファイルのインクルードとコンパイルの順序で問題ありません。
- B.hpp
- A.hpp
- A.tpp または B.tpp (ここでの順序は重要ではありません)
私のファイルは次のように構成されています。
A.hpp のファイル コンテンツ:
#ifndef A_H
#define A_H
#include "B.hpp"
class A { ... };
#include "A.tpp"
#endif
A.tpp のファイル コンテンツ:
#ifndef A_H
#error "Do not include this file directly."
#endif
// ... some implementations for A.hpp
B.hpp のファイル コンテンツ:
#ifndef B_H
#define B_H
class A;
class B { ... };
#include "B.tpp"
#endif
B.tpp のファイル コンテンツ:
#include "A.hpp"
#ifndef B_H
#error "Do not include this file directly."
#endif
// ... some implementations for B.hpp
私の質問は次のとおりです。ライブラリにヘッダーのみのソリューションを使用しているためにのみ発生する、この不必要な循環依存を解消するソリューションはありますか?