2012-04-11 41 views
12

有谁知道一个库,它允许你做这样的事情呢?C++库函数对象用于评估数学/算术表达式

std::transform(vecA.begin(), vecA.end(), 
       vecB.begin(), 
       vecOutput.begin(), 
       // run-time specified expression 
       magic_functor<float>("exp(a/(b+3))") 
); 

其中magic_functor是库提供的函子,a和b通过vecA和vecB迭代。

我可以拿出自己的东西(和将有很多的乐趣这样做),但它可能会更好,以避免重新发明轮子(也是我的老板会杀了我)。花了一些时间在网上搜索,但无法找到符合法案的任何内容。

它需要灵活和快速,所以仿函数的方法,只有解析字符串一次(例如,在内部建设上创建一个执行栈)是理想的,但我开放给其他的解决方案。

+2

这实际上似乎是一个有趣的事情做,现在你我注意它。 – chris 2012-04-11 21:13:37

+2

我恐怕我不能建议任何类似这样的二进制函子接口,你会需要这样做的库;然而,我想可以很简单地写出处理你的'exp(a /(b + 3))'的lambda表达式。可能不是最复杂的解决方案,如果您需要在多个位置重复它,但只要可读性良好,对我来说就好了。 – 2012-04-11 21:15:08

回答

4

几个选项(需要一些工作,将无法正常工作“开箱即用”):

+0

会做布尔和按位的东西很好,Mathpresso似乎有点缺乏灵活性,只是浮动。用Boost Spirit编写我自己的,虽然是一个有趣的项目,但是会有很多工作,而且可能效率不高。想想我可以试试MuParserSSE,因为它比MuParserX快得多,我不需要后者的额外功能。 – smocking 2012-04-13 17:54:31

+0

我觉得精神的方式可能会被证明是最灵活的一个...这是一个有点难以上手,但也有很多例子 - 在精神的博客,一个我张贴和精神的例子。 – Anonymous 2012-04-13 18:05:42

+0

我当然喜欢它只是标题。也许当我有一些时间去杀人。 – smocking 2012-04-13 18:24:34