gpt4 book ai didi

c++ - C++ 中的插件框架

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:55:36 24 4
gpt4 key购买 nike

我正在为可扩展架构设计(集思广益)C++ 插件框架。每个插件注册一个接口(interface),由插件自己实现。这样的框架可能在功能相对强大的嵌入式设备(例如 Atom/ARM)上运行,因此我可以使用 STL 和 Boost。

目前我已经设法编写了一个类似的框架,其中接口(interface)是预先知道的,插件(从动态库加载)注册实现它们的对象。这些对象根据需要由它们的工厂方法实例化,并且方法被正确调用。

现在我想让它更加灵活,让插件注册新接口(interface)(而不仅仅是实现现有接口(interface))从而扩展框架用户可用的 API。

我想到了使用 std::map ,我读过的几篇文章和 stackoverflow 回复中也提到了它。不幸的是,它似乎没有捕捉到不同方法接口(interface)的情况。

我觉得它可能与模板元编程或特征有关,但我无法弄清楚它究竟应该如何工作。谁能帮忙?

最佳答案

尝试查看为您解决这些问题的 XPCOM - 通过重新实现 COM。

你有不知道插件为你的应用程序提供什么接口(interface)的问题,所以你需要一种方法让开发人员访问它,而编译器不知道它是什么(但是,如果你提供头文件,那么突然你确实知道它是什么,你可以编译它而不需要插件未知接口(interface)的幻想)

所以,你将不得不依赖接口(interface)的运行时确定性,这大致要求你以某种方式定义接口(interface),以便框架可以调用任意方法,我认为唯一现实的方法是你可以做到的是将每个接口(interface)定义为一组函数指针,这些函数指针被单独加载,然后存储在数据中供用户调用。这几乎意味着函数指针到名称的映射。这也意味着您只能通过使函数名称唯一来使用编译器的细节(例如重载)。编译器通过将所有函数“改组”为唯一的编码名称来为您完成这项工作。

Type Traits将帮助您将导入的函数包装在您的框架中,以便您可以检查它们并创建适用于任何导入类型的类,但它不会解决导入任意函数的主要问题。

您可能想要阅读的一种方法是 Metaclasses and Reflection沃尔曼。这是 C++ 标准体引用的,但我不知道它是否会成为 future 规范的一部分。或者你可以看看 Boost.Extension

关于c++ - C++ 中的插件框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10361996/

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