2012-04-11 7 views
12

このようなことをするライブラリを知っている人はいますか? magic_functorは、ライブラリが提供するファンクタであり、a及びbはvecAとvecBを通して反復される数学/算術式を評価するためのC++ファンクタライブラリ

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

私は自分自身で何かを考え出すことができましたが、そうするのが楽しいですが、車輪を改革しないでください(私の上司も私を殺すでしょう)。 Webを検索するのに時間を費やしましたが、実際に請求書に適合するものを見つけることはできません。

これは柔軟で高速である必要があります。そのため、文字列を一度だけ解析する(たとえば、実行時に内部的に実行スタックを作成する)ファンクタのアプローチが理想的ですが、他のソリューションには開放されています。

+2

これは実際にあなたが私にしているようなものですそれはそれです。 – chris

+2

私は、バイナリファンクタインターフェイスのようなものを必要とするようなライブラリはお勧めできません。しかし、あなたの 'exp(a /(b + 3))'を扱うラムダ式を書くのはかなり簡単だろうと思います。複数の場所でそれを繰り返す必要がある場合は、おそらく最も洗練された解決策ではないかもしれませんが、可読性が向上する限り、それは私にとっては良さそうです。 –

答えて

4

いくつかのオプション(いくつかの作業を必要とし、「箱から出して」動作しません):

+0

ブール値やビット単位の処理を行うのがいいですし、Mathpressoは柔軟性に欠けているようですが、浮動小数点のみです。ブーストスピリットを使って自分自身を書くことは、楽しいプロジェクトですが、多くの作業になり、効率的ではないようです。私はMuParserSSEを試してみるといいでしょう。なぜなら、MuParserXよりも速く処理でき、後者の特別な機能は必要ないからです。 – smocking

+0

私はスピリットの方が最も柔軟なものになるかもしれないと思う...始めるのは少し難しいですが、多くの例があります - スピリットのブログ、私が投稿したスピリット、そしてスピリットの例です。 – Anonymous

+0

私はそれがヘッダーのみだと確信しています。たぶん私は殺す時間があります。 – smocking

関連する問題