我想为 Linux 编写一个插件架构。我已经尝试研究如何做到这一点,但实际上我一直在寻找更复杂的插件架构的信息,而不是我需要的,我只想要一个非常基本的实现。
为了解释我在做什么,我有一个程序可以接受和处理来自各种来源的输入,同一程序的多个实例可能会运行,每个实例都接受不同的输入源。我想做某种程度的错误检查和纠正,但这种错误检查的逻辑会因输入源而异。所以我希望我的程序为它正在读取的特定源打开一个插件(插件名称可能在配置文件中)并运行库提供的错误检查方法。这比我看到的大多数插件架构和信息更基本,因为
- 它不是跨平台的。我知道我将使用 x86 linux 平台,如果需要,甚至可以定义一个精确的编译器
- “插件”是非常基础的,它可以是每个插件提供的单一方法。
但是,有两件事我必须拥有
1) 必须快。我将大量读取流数据,需要快速处理。出于这个原因,我已经取消了脚本代理的使用,我担心为每个输入翻译脚本逻辑的开销可能会很大
2) 我必须能够检测到现有 .SO 的更新并在不停止程序的情况下加载新版本。
一般来说,我对 c++ 还是半新的,所以对尝试开发任何过于复杂的东西有点担心。我正在寻找对我来说最简单可行的解决方案。
我考虑过 Boost.Extension,但实际上它可能对我需要的东西有点过分。由于我的用例非常简单,我正在尝试决定是否最好手动定义 .SO 而不是尝试使用 Boost 框架。在我工作的地方使用 Boost 也有一些小麻烦,我可以做到,但我必须跳过几圈才能获得许可。
所以谁能告诉我 1) 插件架构真的是我应该在这里尝试的(有没有更简单的解决方案?) 2) 如果他们认为 Boost.Extensions 是最好的方法 3) 可以指出任何描述如何制作一个特定于平台的插件架构(我已经看到很多关于平台独立的讨论,但我不需要做任何复杂的事情)。4) 确保在运行时加载更新版本的库的最佳方法是什么?由于前面声明需要快速处理,因此每次我接受输入时最好避免使用 if 语句的方法。