3

したがって、A と B の 2 つのプロジェクトがあり、B は A に依存しています (A はライブラリで、B はコンソール アプリケーションです)。A はブースト ライブラリを使用し、ヘッダー ファイルとライブラリ ファイルを含めるように構成されていますが、B はそうではありません。

Visual Studio は、ブースト ヘッダー ファイルが見つからないというエラーをスローします (プロジェクト B)。例えば:

エラー C1083: インクルード ファイルを開けません: 'boost/asio.hpp': そのようなファイルまたはディレクトリはありません [プロジェクト: B]

私の質問は次のとおりです。B に Boost ライブラリも含める必要がないようにする方法はありますか?

4

3 に答える 3

2

B に Boost ライブラリも含める必要がないようにする方法はありますか?

はい。ただし、機能を A の型/関数定義の一部として使用することを避けることができる場合に限ります。それらが真に実装のみで使用できる場合は、ヘッダーの依存関係を回避できます。コンパイルされたライブラリ ( asiorequires boost-system) に対してリンクする必要があります。

于 2012-11-12T04:58:22.897 に答える
1

A が優れたライブラリである場合、インターフェイスとファクトリのみを公開する必要があります。これは、ベアであり、他のヘッダーを含まないヘッダーで定義された抽象クラスです。そうではないように思えますが、通常、どのライブラリでもこの状態にすることができます。最悪の場合、ラッパーのようなデカップリング レイヤーを構築する必要があります。別のオプションは、ブーストを含めるようにプロジェクト B を設定することです。自分で使うにはまだ必要かもしれません...

于 2012-11-12T05:09:06.077 に答える
1

ブースト ヘッダーを含むプロジェクト A から .h をインクルードすると、問題が発生します。プロジェクト A の cpp ファイルからブースト hpp のみを含め、ライブラリへの「ブーストレス」インターフェイスを維持する場合は、問題ありません。

于 2012-11-12T04:59:53.487 に答える