gpt4 book ai didi

C++ 工厂和链接器依赖项

转载 作者:搜寻专家 更新时间:2023-10-31 01:53:16 24 4
gpt4 key购买 nike

我的库包括一个接口(interface)(代表一个相机)和一些派生类。
每个派生类都针对特定的 HW 实现,这导致每个派生类都依赖于外部供应商库。

  • 每个派生类都是一个静态库并链接其库依赖

  • 我只提供一个名为Factory 的类,它有一个方法:
    ICamera* 创建(const std::string& 类型)

  • 工厂 #includes 并链接所有派生类,库用户不知道派生的 impl。 create() 的实现很简单:

    if (type == "a") return new CameraA();
    if (type == "b") return new CameraB();
    ...

所以基本上有一个臃肿的 Factory.lib 包含所有必要的依赖项,库用户只需链接到 Factory.lib 就可以创建任何相机 impl

问题

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

最佳答案

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

关于C++ 工厂和链接器依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11409752/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com