2012-04-11 39 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