2016-04-16 6 views
0

SFMLライブラリなどをリンクする動的/静的ライブラリを作成したいとします。今私の問題は、プロジェクトで私のライブラリをunsingするときに、そのプロジェクトでSFML includesが利用可能であることを確認する必要があるということです。
サードパーティのヘッダーに対するこの依存関係をどういうわけか削除できますか?
header-onlyライブラリについてはどうですか?別のライブラリをリンクするが、そのインクルードに依存しないC++ライブラリを作成できますか?

がどのように他のライブラリは、これを処理しますあなたのヘッダファイルを再編成し、コードを再構築する必要があります

答えて

1

SFMLを使用しているとき、私は唯一のSFMLが他のライブラリに依存していても自分のヘッダーを必要とします)。あなたは、ヘッダファイルの2セットを持っている必要があります:

  • あなたのライブラリーを構築するために使用される内部ヘッダファイル、およびこれらのヘッダファイルが含まれ、SFMLのヘッダファイル、クラスおよびリソースを参照します。

  • ライブラリへのインターフェイスを構成するパブリックヘッダファイル。

あなたのライブラリは公開セットのみをインストールします。パブリックヘッダーファイルにはSFMLヘッダーファイルは含まれず、SFMLクラスは参照しません。

一般に、あなたのパブリックヘッダファイルとクラスは、内部クラスとそのポインタを宣言しますが、定義しません。内部クラスは、独自の内部ヘッダーファイルでのみ定義されます。

大規模な人気のあるC++ライブラリのヘッダーファイルを見てください。パブリックヘッダファイルで定義されていない内部クラスへのポインタやその他の参照を見つけることがよくあります。これらは、図書館が使用する内部クラスであり、公開されていません。

多くのCライブラリもこのように構成されています。

+0

素早く答えていただきありがとうございました:)、これは同じ問題を引き起こしますか? 私はSFMLヘッダーを含むクラスA( 'A.h' /' A.cpp')を持っています。私は今、 'A.h'を含む' B.h'を持っています。ライブラリーを使用し、その 'B.h 'を含む場合、ヘッダーはまだ必要ですか? – sro5h

+0

はい。 A.hにSFMLヘッダーが含まれている場合は、それが必要になります。 A.hを含まないようにB.hを書き換えます。私が言ったように:他の図書館がこれをどうやって行うのか見てみましょう。 –

+0

これがうまく動作しない場合、 'SFML'インクルードでdepencyを削除する唯一の方法は、' Forward-Declaration'を経由することですか?しかし、普通のSFML型メンバーが必要な場合はどうすればいいですか? – sro5h

関連する問題