gpt4 book ai didi

c++ - 如何动态加载 C++ 对象并通过包装器接口(interface)使用它们

转载 作者:行者123 更新时间:2023-11-30 03:06:12 27 4
gpt4 key购买 nike

我有一个多线程动态库,它公开了一个基本的 API,我在几个应用程序。目前我正在使用一些基本线程和同步原语的自定义(如遗留)实现,我对此一点都不满意,因为它没有提供太多的灵 active ,功能,而且维护起来也很麻烦(两者都有实现Linux 和 Windows)。

我想用一些现有的线程库替换它,但我也想提供一些灵 active ,这意味着我希望能够尝试一堆库,看看它们在我构建的不同平台上的表现如何库(我想尝试 boost::thread、Poco::Thread 和新的 C++0X 线程实现),甚至让我提供库的用户在需要时适应它自己的线程自定义实现,这样库和用户的应用程序将能够使用相同的线程基础结构 - 理想情况下,我会在这些行上有一个配置文件或其他内容,让用户指定其所需的实现或使用默认提供的实现。

我在想以下几点:

  • 制作一个薄包装器(pimpl 样式)以在我的库中使用,它将使用动态类加载器在运行时适应所需的实现。但是我该如何处理 C++0X 线程的情况呢?这些在标准库中,已经链接到我的库,因此在运行时自定义加载它没有意义。
  • 使用动态加载程序和原型(prototype)设计模式。但是该模式需要实现 clone() 方法,这意味着更改线程库代码。我可能对这个模式理解得不好,我可能对此有误,所以如果我错了,请纠正我。

如您所见,我现在没有太多想法可以使用(但这是一个开始),因此以下任何指示都会有很大帮助:

  • 提供这样的功能是个好主意吗?您看到任何注意事项了吗?
  • 动态加载工具是否可行?缺点是什么?关于如何正确实现的任何指示/链接?
  • 如果我采用“精简包装”方式,将其公开为我的图书馆 API 的一部分是否是个好主意?
  • 是否有任何替代方案/模式来实现相同类型的功能(我的意思是实现相同的结果但没有动态加载)?

最佳答案

提供动态或延迟线程解决方案加载的能力有什么好处?理想情况下,您会选择一个线程解决方案并创建一个具有 API 接口(interface)的库,如果后来发现该解决方案不够用,您可以使用相同的接口(interface)但使用不同的底层解决方案编写一个新库。我什至会考虑静态链接这样的库,尽管 DLL 也很好。我不会为让它在运行时可互换或类似的事情而烦恼。

我强烈推荐 Boost 线程。跨平台并且基于 POSIX,它很容易以多种方式实现。我相信 C++0x 线程略微基于此解决方案,但是由于 C++0x 尚未最终确定或未得到所有编译器的完全支持,因此我只会将其视为 future boost 的替代品。

关于c++ - 如何动态加载 C++ 对象并通过包装器接口(interface)使用它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6832600/

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