0

推定

DirectX ヘッダーをプリコンパイル済みヘッダーとして使用してベース グラフィック エンジンを実装する C++ プロジェクト (静的) ライブラリ 'A' があります。

また、「A」ヘッダーをプリコンパイル済みヘッダーとして使用してゲーム エンジンを実装するプロジェクト (静的) ライブラリ「B」があります。

そして、以前の 2 つのプロジェクトを使用してゲームを実装する C++ プロジェクト 'C' があります。

今私の質問は:

プロジェクト 'C' にプロジェクト 'B' のみを含めて (DirectX ヘッダーと 'A' ヘッダー) を含めない方法はありますか?

またはその一方で

(DirectX とプロジェクト 'A') をプロジェクト 'B' に埋め込む方法はありますか?

タンク

4

3 に答える 3

2

プロジェクトBに、Cモジュールから使用できるゲームエンジンの機能を公開するクリーンなインターフェイスヘッダーがいくつかあることを確認してください。実装方法の詳細は説明しません。それらは抽象クラスである場合もあれば、インターフェースの規則に従う場合もあります。そして、それらはすべてCに含まれる必要があるものでなければなりません。すべてのDirectXのものは、外部使用を目的としていないプライベートファイルに配置できます。

于 2011-06-27T08:33:42.420 に答える
1

プリコンパイル済みヘッダーは、ライブラリのユーザーに決して公開しないでください。それらはライブラリの実装の詳細です。これ以上何もない。PCH は .cpp ファイルに含まれるものです。ヘッダー ファイルからインクルードしないでください。

覚えておいてください: ヘッダー ファイルには、そのヘッダー ファイルがコンパイルするために絶対に必要なものだけを含める必要があります。

あなたの例を見てみましょう。プロジェクト A は DirectX を使用します。したがって、プロジェクト A の .cpp ファイルには、DirectX ヘッダーを含む PCH が含まれています。ここで、プロジェクト A へのインターフェイスが DirectX オブジェクトと型を使用する場合、プロジェクト Aインターフェイスヘッダー (プロジェクト A のユーザーが使用するもの) に DirectX ヘッダーを含める必要があります。

これは、コンパイル時間を改善するために PCH を使用するプロジェクト A の機能には影響しません。DirectX ヘッダーにはインクルード ガードがあるため、複数回インクルードされることはありません。プロジェクト A のインターフェイス ヘッダーにそれらを含めるのに費用はかかりません。

プロジェクト A を使用するプロジェクト B には、独自の PCH ファイルがあります。この PCH には、DirectX とプロジェクト A のヘッダーが含まれます。したがって、プロジェクト A のヘッダーに DirectX を含めても、プロジェクト B のビルド時間には影響しません。

プロジェクトBはプロジェクトAを使用します。しかし、あなたが説明したように、プロジェクトBはプロジェクトBのユーザーをプロジェクトAまたはDirectXに公開しません。つまり、プロジェクト B がプロジェクト A を使用するという事実は、プロジェクト B の実装の詳細であるため、プロジェクト B のユーザーには公開されません。

そのため、プロジェクト B のインターフェイス ヘッダー (プロジェクト B のユーザーが使用するヘッダー) には、プロジェクト A または DirectX からのものは何も含まれていません。したがって、プロジェクト B を使用するこのプロジェクト C には含まれません。

于 2011-06-27T08:55:50.743 に答える
0

B プロジェクトはプロジェクト A を含む/リンクするため、プロジェクト「C」に「A」を含める必要はありません。プロジェクト B にはプロジェクト A にあるすべてのものがあるため、プロジェクト C には A と B のすべてが含まれます。

于 2011-06-27T08:17:54.100 に答える