2012-04-11 29 views
12

Czy ktoś wie o bibliotece, która pozwala na zrobienie czegoś takiego?Biblioteka funktorów C++ do oceny wyrażeń matematycznych/arytmetycznych

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

przypadku magic_functor jest funktor biblioteki dostarczonego oraz A i B są iteracyjnie poprzez VECA i vecB.

Mogłem wymyślić coś sam (i byłoby mi bardzo dobrze z tym zrobić), ale prawdopodobnie lepiej byłoby uniknąć ponownego odkrywania koła (również mój szef by mnie zabił). Spędziłem trochę czasu na przeszukiwaniu sieci, ale nie mogę znaleźć niczego, co pasowałoby do rachunku.

Musi być elastyczny i szybki, więc podejście funktora, które tylko raz analizuje łańcuch (na przykład tworzy stos wewnętrzny w konstrukcji) byłoby idealne, ale jestem otwarty na inne rozwiązania.

+2

To naprawdę wydaje się fajną rzeczą zrobić teraz, że ja wybierz to. – chris

+2

Obawiam się, że nie mogę zasugerować żadnej biblioteki, która zrobiłaby coś takiego z takim interfejsem binarno-funktorskim, jakiego potrzebujesz; jednak wyobrażam sobie, że pisanie wyrażeń lambda, które poradzą sobie z 'exp (a/(b + 3))' byłoby dość proste. Prawdopodobnie nie jest to najbardziej wyrafinowane rozwiązanie, jeśli chcesz je powtarzać w wielu miejscach, ale jeśli chodzi o czytelność, wydaje mi się to w porządku. –

Odpowiedz

4

kilka opcji (potrzeba trochę pracy i nie będzie działać „out of the box”):

+0

Byłoby miło robić rzeczy logiczne i bitowe, a Mathpresso wydaje się być nieco pozbawiony elastyczności, będąc jedynie spławem. Pisanie własnego z Boost Spirit, choć zabawnym projektem, byłoby dużo pracy i prawdopodobnie nie tak wydajne. Pomyśl, że mogę spróbować MuParserSSE, ponieważ jest o wiele szybszy niż MuParserX i nie potrzebuję dodatkowych funkcji tego ostatniego. – smocking

+0

Myślę, że droga Ducha może okazać się najbardziej elastyczna ... Trochę trudno jest zacząć, ale jest wiele przykładów - na blogu Spirit, na tym, który napisałem i w przykładach Spirit. – Anonymous

+0

Oczywiście podoba mi się, że jest to tylko nagłówek. Może, gdy mam trochę czasu, żeby zabić. – smocking

Powiązane problemy