考虑我正在编写一个静态库。让它有一个类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
在我的情况下使用它是否有点矫枉过正?
谢谢。