首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++工厂和链接器依赖关系

C++工厂和链接器依赖关系
EN

Stack Overflow用户
提问于 2012-07-10 08:51:11
回答 1查看 141关注 0票数 2

我的库包括一个接口(表示照相机)和一些派生类。

每个派生被实现到特定的HW,这导致每个派生类依赖于外部供应商库。

  • 每个派生类都是一个静态库,并链接其库依赖项。
  • 我只提供一个名为Factory的类,它有一个方法: ICamera* create(const std::string& type)
  • 工厂#包含并链接所有派生类,库用户不知道派生的实现。create()是天真地实现的: if (type == "a") return new CameraA(); if (type == "b") return new CameraB(); ...

因此,基本上有一个臃肿的Factory.lib包含了所有必要的依赖项,库用户只需链接到Factory.lib就可以创建任何摄像头。

问题

  1. 当您链接到Factory.lib时,在运行您的应用程序时,需要来自所有供应商的所有dll。理想情况下,我希望您只需要您正在使用的特定相机的dll。有办法做到这一点吗?
  2. 我正在考虑编译每个派生的dll,而不是库。现在Factory.lib没有膨胀,所有摄像机特定的依赖项都在每个派生的dll中。如果我不解决li #1,这并没有多大帮助,因为除了Factory.lib和供应商dll之外,您还需要所有派生dll。
  3. 是否有更好的方法来实现Creator类(或方法)?我的派生类是一个有限的数量,5-6,而且不经常增长。
  4. 欢迎任何其他最小化依赖和改进设计的提示。
EN

回答 1

Stack Overflow用户

发布于 2012-07-10 09:10:34

您可以在运行时加载共享库(或dll)。您必须了解查找特定ICamera实现的位置(在哪个dll中)。例如,您可以导出每个dll的第二个函数,该函数准确地提供信息,具体的dll提供了哪些实现(type=="a“和type=="c")。启动应用程序时,它可以搜索dll并为每个dll调用该信息接口。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11409752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档