我知道有一些libs,比如boost.spirit或来自http://jamesgregson.blogspot.de/2012/06/mathematical-expression-parser-in-c.html等许多其他的表达式解析器.
但是,我的表达式要在循环中进行很多次计算,并且每次运行解析器似乎效率很低.
假设我的表达式字符串是"exp(-0.5*(t-t_0)^2/(b^2))"(简单高斯),其中t_0和b是常量,并且只有t(=时间)在循环内变化.
我希望能够以某种方式将表达式保存到接受一个参数(对于变量t)然后计算表达式的函数中,而不是调用解析器数百万次.
您是否知道如何做到这一点或者是否可以完成?
你想要达到的目标是完全可行的.例如,您可以从表达式构建AST(https://en.wikipedia.org/wiki/Abstract_syntax_tree),其中树的某些节点表示变量.
然后,对变量的某些值的表达式的评估对应于该树的评估.
实际上,大多数解析器都会在内部生成这样一个树,你可能会找到一些产生AST的库来满足你的需要,或者你可能想自己编写它(参见https://en.wikipedia.org/wiki/Shunting-- yard_algorithm).这是一个生成AST的表达式解析器的简单示例(虽然在Java中).