我的库包括一个接口(代表一个相机)和一些派生类。
每个派生类都实现到特定的硬件,这导致每个派生类都依赖于外部供应商库。
每个派生类都是一个静态库并链接其库依赖项
我只提供一个名为 的类
Factory
,它有一种方法:
ICamera* create(const std::string& type)
工厂#includes 并链接所有派生类,库用户不知道派生的实现。
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 个,而且不会经常增长。
- 欢迎任何其他可以最小化依赖关系和改进设计的技巧