静的ライブラリを作成していると考えてください。クラスを持たせましょう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
そして、私の場合に使用するのはやり過ぎですか?
ありがとう。