10

有一些解释性语言,例如 Lisp、Tcl、Perl 等,可以在运行时轻松地在代码中定义 lambda/proc/sub 并在同一会话中对其进行评估。

那里有编译语言,例如 C++,它的执行速度比解释语言快得多,但是在运行时在编译程序中定义一个函数并执行它并不容易,如果可能的话。

这里的问题是执行以下操作:

  1. 在运行时定义函数:例如,基于初始输入数据导出数据的分析模型。

  2. 在循环中快速执行上述函数:例如,应用派生的分析模型来分析传入的数据。

我看到的一种解决方案不是很漂亮:

  1. 基于初始输入数据,在嵌入式 Tcl 中导出了表示分析模型的过程。

  2. 查找表是通过在 Tcl 中对一组样本点进行评估而创建的,乐观地说,这些样本点将涵盖适用范围。

  3. 查找表从 Tcl 解释器传回二进制文件(用 C++ 开发)。

  4. 然后通过在查找表中“足够接近”的值之间进行插值来分析传入的数据。

上述解决方案有效,但在概念和计算方面存在相当多的问题。因此问题是:是否可以纯粹在 C++ 中定义一个函数并使其可用于在同一运行时会话中执行?

从概念上讲,是否有可能将函数创建为字符串,在内存中编译,然后以某种方式将其链接回正在执行的二进制文件中?

4

1 回答 1

13

如果您想要开箱即用的东西,请查看ExprTK。如果您想自己编写表达式解析器,请查看Boost Spirit

另一种方法是动态创建 C++ 代码,将其编译为共享库(插件)并在运行时加载它。这可能是最快的解决方案。

于 2013-09-04T18:34:48.163 回答