2012-04-11 16 views
12

¿Alguien sabe de una biblioteca que le permite hacer algo como esto?Biblioteca funcionadora C++ para evaluar expresiones matemáticas/aritméticas

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

Dónde magic_functor es el funtor biblioteca proporcionada y a y b se iteran a través de Veca y vecB.

Podría hacer algo por mi cuenta (y me divertiría mucho haciéndolo), pero probablemente sea mejor evitar reinventar la rueda (también mi jefe me mataría). Pasó algún tiempo buscando en la web, pero realmente no puede encontrar nada que encaje con la factura.

Tiene que ser flexible y rápido, por lo que un enfoque functor que solo analiza la cadena una vez (por ejemplo, crea una pila de ejecución internamente en la construcción) sería ideal, pero estoy abierto a otras soluciones.

+2

que en realidad parece como una cosa divertida de hacer ahora que me nción. – chris

+2

Me temo que no puedo sugerir ninguna biblioteca que haga algo así con el tipo de interfaz de binary-functor que necesitaría; sin embargo, me imagino que sería bastante simple escribir expresiones lambda que manejen su 'exp (a/(b + 3))'. Posiblemente no sea la solución más sofisticada si necesita repetirla en varias ubicaciones, pero en lo que respecta a la legibilidad, me parece bien. –

Respuesta

4

Varias opciones (se necesita algo de trabajo y no va a funcionar “fuera de la caja”):

+0

Sería bueno hacer cosas booleanas y bit a bit y parece que a Mathpresso le falta flexibilidad, solo flotar. Escribir el mío con Boost Spirit, aunque sea un proyecto divertido, sería mucho trabajo y probablemente no tan eficiente. Creo que podría darle una oportunidad a MuParserSSE, ya que es mucho más rápido que MuParserX y no necesito las características adicionales de este último. – smocking

+0

Creo que el modo Espíritu podría ser el más flexible ... Es un poco difícil comenzar, pero hay muchos ejemplos: en el blog Spirit, el que publiqué y en ejemplos de Spirit. – Anonymous

+0

Ciertamente me gusta que sea solo encabezado. Tal vez cuando tenga algo de tiempo para matar. – smocking

Cuestiones relacionadas