2012-04-11 20 views
12

Qualcuno sa di una libreria che ti permette di fare qualcosa di simile?Libreria funtore C++ per la valutazione di espressioni matematiche/aritmetiche

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

Dove magic_functor è il funtore biblioteca fornita e a e b sono iterati attraverso Veca e vecB.

Potrei inventarmi qualcosa (e mi divertirò molto a farlo), ma probabilmente è meglio evitare di reinventare la ruota (anche il mio capo mi ucciderebbe). Ho trascorso un po 'di tempo a cercare sul Web, ma non riesco davvero a trovare nulla che corrisponda al conto.

Deve essere flessibile e veloce, quindi un approccio di tipo functor che analizzi solo una volta la stringa (ad esempio crea una pila di esecuzione internamente in fase di costruzione) sarebbe l'ideale, ma sono aperto ad altre soluzioni.

+2

Che in realtà sembra una cosa divertente da fare ora che tu me questo – chris

+2

Temo di non poter suggerire alcuna libreria che faccia qualcosa del genere con il tipo di interfaccia binario-functor di cui avresti bisogno; tuttavia immagino che sarebbe abbastanza semplice scrivere espressioni lambda che gestiscono il tuo exp (a/(b + 3)) '. Forse non è la soluzione più sofisticata se hai bisogno di ripeterla in più posizioni, ma per quanto riguarda la leggibilità va mi sembra giusto. –

risposta

4

diverse opzioni (bisogno di qualche lavoro e non funziona “out of the box”):

+0

Sarebbe bello fare roba booleana e bit per bit e Mathpresso sembra essere un po 'privo di flessibilità, essendo solo fluttuante. Scrivere il mio con Boost Spirit, sebbene sia un progetto divertente, sarebbe molto lavoro e probabilmente non così efficiente. Penso che potrei dare a MuParserSSE una prova, dal momento che è molto più veloce di MuParserX e non ho bisogno delle funzionalità extra di quest'ultimo. – smocking

+0

Penso che la via dello Spirito potrebbe rivelarsi la più flessibile ... È un po 'difficile iniziare, ma ci sono molti esempi - sul blog Spirit, quello che ho postato e negli esempi di Spirit. – Anonymous

+0

Mi piace che sia solo per l'intestazione. Forse quando avrò un po 'di tempo per uccidere. – smocking

Problemi correlati