静的ライブラリを作成していると考えてください。クラスを持たせましょうFoo
// mylib.h
#include <dependency_header_from_other_static_library.h>
class Foo {
// ...
private:
type_from_dependent_library x;
}
ご覧のとおり、このライブラリ(これを呼びましょうmylib)は別のライブラリに依存しています。それはうまくコンパイルされます。しかし、ユーザーがそのコード(を使用Fooして含むmylib.h)をコンパイルし、私のライブラリとリンクすると、コンパイルは失敗します。これは、ユーザーがdependency_header_from_other_static_library.hコードをコンパイルするためにもヘッダーファイルを持っている必要があるためです。
この依存関係をユーザーから隠したい。これはどのように行うことができますか?頭に浮かぶのはPIMPLイディオムです。好き:
// mylib.h
#include <dependency_header_from_other_static_library.h>
class Foo {
// ...
private:
class FooImpl;
boost::shared_ptr<FooImpl> impl_;
}
// mylib_priv.h
class FooImpl {
// ...
private:
type_from_dependent_library x;
}
Fooただし、のクラスのインターフェイスを複製する必要がありますFooImpl。PIMPLそして、私の場合に使用するのはやり過ぎですか?
ありがとう。