私のコードのいくつかを分離し、他の場所から使用できる共有ライブラリに入れようとしています。ドキュメントでは:外部ヘッダーを含むqt共有ライブラリ
http://doc.qt.io/archives/qt-4.7/sharedlibrary.html
彼らは、あなたが他のヘッダファイルにリンクすることはできませんと言います。共有ライブラリに共有ヘッダーを含めるにはどうしたらいいですか?
私のコードのいくつかを分離し、他の場所から使用できる共有ライブラリに入れようとしています。ドキュメントでは:外部ヘッダーを含むqt共有ライブラリ
http://doc.qt.io/archives/qt-4.7/sharedlibrary.html
彼らは、あなたが他のヘッダファイルにリンクすることはできませんと言います。共有ライブラリに共有ヘッダーを含めるにはどうしたらいいですか?
あなたが提供したリンクで説明している共有ライブラリは、.so(共有オブジェクト)ファイル(Windowsではダイナミックリンクライブラリ)、または静的ライブラリ(.lib)です。 Qtはこの種のライブラリを提供しています。他の多くのベンダーやプロジェクトも同様です。あなたのような別のアプリケーションでそれらを使用するには、にはヘッダーが含まれ、リンクがライブラリに含まれます。
この記事で警告しているのは、ユーザが持っていないヘッダーファイル(プロジェクトの一部ではないもの)です。他の誰かがあなたの新しい "共有ライブラリ"を使うためには、あなたが提供するヘッダファイルを含める必要があることを覚えておいてください。そのファイルに含まれていないの他のヘッダーが含まれていると、エラーが発生します。
この問題を回避するには、実装(.cpp)ファイルに#include
を入れます。そうすれば、それらは将来のユーザーから隠されます。 Qtは"pointer-to-implementation" (pimpl)イディオムを推奨しています - すべての実装の詳細は、実装が依存するすべてのヘッダファイルを含め、クラスのユーザからは隠されています。
pimplで全然行っていなくても、簡単に同じことができます。目標はヘッダー内の#include
に絶対に必要なファイルだけです。うまくいけばあなたのライブラリにすべてを提供してください。
なぜ、含めるファイルを非表示にするのですか?ユーザーが要件を認識してほしいと思っていませんか?私はそれが絶対に必要とされていないことを含めることを望むヘッダーの例を与えることができますか? – chikuba
@chikuba直接使用する必要のないヘルパークラスを持っているとしましょう。ライブラリーの勇気だけが重要です。ポインタを文字列にマップするマネージャクラスは、物事を整理するためのIDとして言います。これはあなたのライブラリのパブリックインターフェイスの一部ではありません。あなたのパブリックインターフェイスのヘッダーにそのファイルを '#include 'すると、あなたのライブラリを使用している誰もがそれを知っていて、それにアクセスする必要があります。これとは対照的に、インプリメンテーションファイルにのみ#includeを含めると.libファイルの一部になり、ユーザーはそれを心配する必要はありません。 – tmpearce
ああ。外部のヘッダファイルであっても、libファイルに組み込まれていますか?私はヘッダーライブラリにいくつかのヘッダーを持っています。これは実際に依存しています。 – chikuba