3

すべてをヘッダーのみにする代わりにソース ファイルを使用する場合、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

私の質問は次のとおりです。ライブラリにヘッダーのみのソリューションを使用しているためにのみ発生する、この不必要な循環依存を解消するソリューションはありますか?

4

0 に答える 0