2012-04-11 16 views
12

Böyle bir şey yapmanıza izin veren bir kütüphane bilen var mı? magic_functor kütüphanesi tarafından sağlanan functor ve a ve b olanC++ matematiksel/aritmetik ifadeleri değerlendirmek için functor kütüphanesi

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

VECA ve vecB ile tekrarlanır.

Kendi kendime bir şeyle gelebilirim (ve bunu yaparken çok fazla eğlenceler olurdu), ama muhtemelen tekerleği yeniden icat etmekten kaçınmak daha iyidir (ayrıca patronum beni öldürür). Web'de arama yapmak için biraz zaman harcadık, ancak faturaya uyan bir şey bulamadık.

Esnek ve hızlı olması gerekir, bu nedenle yalnızca bir kez dizeyi ayrıştıran bir functor yaklaşımı (örneğin, inşaatta dahili olarak bir yürütme yığını oluşturur) ideal olur, ancak diğer çözümlere açıktır.

+2

ntion o. – chris

+2

Korkarım ki ihtiyacınız olan ikili-functor ara yüzü ile böyle bir şey yapacak herhangi bir kütüphane öneremem; Ancak, 'exp (a/(b + 3)) 'i kullanan lambda ifadeleri yazmak oldukça basit olurdu. Muhtemelen pek çok yerde tekrarlamak gerekirse, en karmaşık çözüm değil, ama okunabilirlik devam ettiği sürece bana Tamam görünüyor. –

cevap

4

Çeşitli seçenekler (bazı iş ve “kutunun dışında” çalışmaz):

+0

Boolean ve bitly şeyler yapmak güzel olurdu ve Mathpresso esneklikten yoksun gibi görünüyor, sadece yüzüyor. Boost Spirit ile kendi yazımı eğlenceli bir proje olsa da, çok fazla iş ve muhtemelen o kadar da verimli olmazdı. MuParserSS'i denemeyi düşünüyorum, çünkü MuParserX'ten daha iyi bir anlaşma ve ikincisinin ekstra özelliklerine ihtiyacım yok. – smocking

+0

Bence Ruh yolu en esnek olana dönüşebilir ... Başlamak biraz zor ama birçok örnek var: Ruh blogunda, gönderdiğim ve Ruhsal örneklerde. – Anonymous

+0

Kesinlikle bunun sadece başlık olması hoşuma gidiyor. Belki öldürecek zamanım olduğunda. – smocking