2012-04-11 3 views
12

Kennt jemand eine Bibliothek, die Ihnen erlaubt, so etwas zu tun?C++ - Funktor-Bibliothek zum Auswerten von mathematischen/arithmetischen Ausdrücken

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

Wo magic_functor ist die Bibliothek bereitgestellte Funktors und a und b sind durch VECA und Vecb iteriert.

Ich könnte mir selbst etwas einfallen lassen (und ich würde sehr viel Spaß dabei haben), aber es ist wahrscheinlich besser, das Rad nicht neu zu erfinden (auch mein Boss würde mich töten). Habe einige Zeit damit verbracht, im Internet zu suchen, aber ich kann nicht wirklich etwas finden, das zur Rechnung passt.

Es muss flexibel und schnell sein, daher wäre ein Funktor-Ansatz, der die Zeichenfolge nur einmal analysiert (z. B. erstellt einen internen Ausführungsstack), ideal, aber offen für andere Lösungen.

+2

, der wie ein Spaß, was tatsächlich scheint mir jetzt, dass Sie zu machen ntion es. – chris

+2

Ich fürchte, ich kann keine Bibliotheken vorschlagen, die so etwas mit der Art von Binär-Funktor-Schnittstelle tun würden, die Sie brauchen würden; aber ich würde mir vorstellen, dass es ziemlich einfach wäre, Lambda-Ausdrücke zu schreiben, die mit 'exp (a/(b + 3)) umgehen. Möglicherweise nicht die ausgeklügeltste Lösung, wenn Sie es an mehreren Orten wiederholen müssen, aber soweit es die Lesbarkeit betrifft, scheint es mir in Ordnung zu sein. –

Antwort

4

Mehr Optionen (einige Arbeit benötigen und „out of the box“ nicht funktioniert):

+0

Wäre schön, boolean und bitweises Zeug zu machen, und Mathpresso scheint etwas an Flexibilität zu fehlen, da es nur float ist. Mit Boost Spirit mein eigenes zu schreiben, obwohl es ein lustiges Projekt ist, wäre eine Menge Arbeit und wahrscheinlich nicht so effizient. Ich denke, ich könnte MuParserSSE ausprobieren, da es viel schneller ist als MuParserX und ich die zusätzlichen Funktionen des letzteren nicht benötige. – smocking

+0

Ich denke, Spirit Way könnte sich als der flexibelste herausstellen ... Es ist ein bisschen schwierig anzufangen, aber es gibt viele Beispiele - auf dem Spirit Blog, dem, den ich gepostet habe und in Spirit Beispielen. – Anonymous

+0

Ich mag sicherlich, dass es nur Header ist. Vielleicht wenn ich etwas Zeit zum Töten habe. – smocking

Verwandte Themen