【发布时间】:2012-07-10 08:51:11
【问题描述】:
我的库包括一个接口(代表一个相机)和一些派生类。
每个派生类都实现到特定的硬件,这导致每个派生类都依赖于外部供应商库。
每个派生类都是一个静态库并链接其库依赖项
我只提供一个名为
Factory的类,它有一个方法:ICamera* create(const std::string& type)-
工厂#includes 并链接所有派生类,库用户不知道派生的impl。
create()被天真地实现了:if (type == "a") return new CameraA();if (type == "b") return new CameraB();...
所以基本上有一个臃肿的 Factory.lib 包含所有必要的依赖项,库用户可以通过链接到 Factory.lib 来创建任何相机 impl
问题
- 链接到 Factory.lib 时,运行应用程序时需要所有供应商提供的所有 dll。理想情况下,我希望您只需要您正在使用的特定相机的 dll。有没有办法做到这一点?
- 我正在考虑将每个派生的文件编译为 dll 而不是 lib。现在 Factory.lib 并不臃肿,所有相机特定的依赖项都在每个派生的 dll 中。如果我不解决
li#1,这将无济于事,因为除了 Factory.lib 和供应商 dll 之外,您仍然需要所有派生的 dll。 - 有没有更好的方法来实现 Creator 类(或方法)?我的派生类数量有限,只有 5-6 个,而且不会经常增长。
- 欢迎提供任何其他可最大限度减少依赖关系和改进设计的技巧
【问题讨论】:
-
Dlls 可以是Delay Loaded。我从来没有这样做过,所以我不知道它是否符合您的需求(因此将此作为评论而不是回答),但它可能会消除让所有 Dll 可用的需要。
标签: c++ dependencies factory