gpt4 book ai didi

c++ - C/C++ Plugin API设计困境

转载 作者:太空狗 更新时间:2023-10-29 21:24:35 24 4
gpt4 key购买 nike

我正在为包含 3 个组件的解决方案设计 C/C++ 插件架构:

  1. 客户层
  2. 核心级别
  3. 可视化水平

所有这些级别都有与另一侧相应插件对话的插件(即:客户端、磁盘插件与核心磁盘插件对话,可能还有可视化磁盘插件,但不与核心 CPU 插件对话)

现在,我想让插件的创建尽可能简单,所以我想出了以下方法:插件在共享库中实现并按要求加载,并且有一组预定义的函数,例如加载、卸载、名称等...组件加载插件共享库,查找这些函数,完成工作,卸载插件。

现在,有一个头文件,例如:

plugin_client.h:

/***************************************************************************
* Methods that are exposed in a client side plugin *
***************************************************************************/
PLUGIN_LOAD_STATUS load();
PLUGIN_UNLOAD_STATUS unload(PLUGIN_UNLOAD_REQUEST reason);
const char* name();
void do_work();

这让插件开发者清楚他需要实现上述功能才能将插件集成到系统的客户端组件中。

困境开始了:对于核心组件插件,也应该有一个非常相似(几乎相同)的头文件,对于可视化部分也是如此。问题来了:

我应该如何处理这种情况?我想到了 2 个解决方案:

  1. 一个用于不同组件的所有插件的公共(public)头文件,即:plugin.h,所有可以实现的功能都在那里,并带有注释,该方法应该在其中实现客户端,在核心中,在可视化组件中。这样做的缺点是一切都在一个地方,而且很多不必要的东西对不感兴趣的各方可见。
  2. 每个插件的头文件,因此:plugin_client.hplugin_core.hplugin_vis.h和插件开发人员包括他想要的。这些插件有一个特殊的功能:int plugin_type(); 如果这是一个客户端、核心或可视化插件,它会返回。这样做的缺点是信息重复。

如果您对如何优雅地解决这个难题有任何想法,请告诉我?

谢谢,f。

最佳答案

实际上并不一定要有重复的信息。特定类型的 header 如何包含基本 header ,如下所示:

plugin_base.h:

/***************************************************************************
* Methods that are exposed in a client side plugin *
***************************************************************************/
PLUGIN_LOAD_STATUS load();
PLUGIN_UNLOAD_STATUS unload(PLUGIN_UNLOAD_REQUEST reason);
const char* name();
void do_work();
int plugin_type();

plugin_client.h:

#include "plugin_base.h"
void client_only_function();

其他插件类型完全相同。

关于c++ - C/C++ Plugin API设计困境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15761123/

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