【发布时间】:2012-10-17 16:28:14
【问题描述】:
假设我正在编写一个静态库。让它有一个类Foo
// mylib.h
#include <dependency_header_from_other_static_library.h>
class Foo {
// ...
private:
type_from_dependent_library x;
}
如您所见,这个库(我们称之为mylib)依赖于另一个库。它编译得很好。但是当用户编译它的代码(使用Foo并包含mylib.h)并与我的lib链接时编译失败,因为用户还需要有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;
}
但这需要我在FooImpl 中复制Foo 类的接口。而且,在我的情况下使用PIMPL 是不是有点矫枉过正?
谢谢。
【问题讨论】:
标签: c++ dependencies static-libraries pimpl-idiom