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.
To naprawdę wydaje się fajną rzeczą zrobić teraz, że ja wybierz to. – chris
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. –