Frage

Ich werde zuerst das Problem beschreiben und dann, was ich sehe derzeit in Bezug auf Bibliotheken.

In meiner Anwendung, haben wir eine Reihe von Variablen, die immer zur Verfügung stehen. Zum Beispiel: TOTAL_ITEMS, Preis, VERTRÄGE, ETC (wir rund 15 von ihnen haben). Ein Kunde der Anwendung möchte bestimmte Berechnungen durchgeführt hat und angezeigt werden, diese Variablen verwenden. Bisher habe ich das Hinzufügen wurde ständig diese Berechnungen auf die App. Es ist Schmerz im Hintern, und ich möchte es allgemeinere machen durch eine Vorlage zu erstellen, in dem der Benutzer eine Reihe von Formeln angeben, die die Anwendung analysieren und berechnen.

Hier ist ein Fall:

total_cost = CONTRACTS*PRICE*TOTAL_ITEMS

Also, wollen so etwas wie die für den Benutzer zu tun in der Template-Datei definiert werden:

total_cost = CONTRACTS*PRICE*TOTAL_ITEMS und einige Meta-Tag, wie Bildschirm, um sie anzuzeigen auf. Daher werden sie die Formel mit einem Bildschirm werden, angibt. Und die Datei viele Formeln dieser Art enthalten.

Gerade jetzt, ich bin auf der Suche zwei libraies: Geist und matheval

Würde jemand Empfehlungen machen, was für diese Aufgabe besser ist, sowie Referenzen, Beispiele, Links?

Bitte lassen Sie mich wissen, ob die Frage unklar ist, und ich werde versuchen, um sie weiter zu klären.

Danke,

Sasha

War es hilfreich?

Lösung

Wenn Sie eine feste Anzahl von Variablen kann es etwas sein Overkill einen Parser aufzurufen. Obwohl Geist ist cool und ich habe gefehlt, es in einem Projekt zu verwenden.

würde ich wahrscheinlich nur die Zeichenfolge tokenize, machen eine Karte Ihrer Variablen mit Namen eingegeben (vorausgesetzt, alle Variablen sind Ints):

map<const char*,int*> vars;
vars["CONTRACTS"] = &contracts;
...

Dann eine einfache postfix Rechnerfunktion verwenden, um die tatsächliche Mathematik zu tun.

Edit:

bei MathEval Blick scheint es, genau das zu tun, was Sie wollen; die Variablen und bewerten mathematische Funktionen dieser Variablen. Ich bin mir nicht sicher, warum Sie eine Lösung auf der Ebene eines Syntax-Parser erstellen möchten. Haben Sie irgendwelche Anforderungen haben, die MathEval nicht erfüllt?

Andere Tipps

Sieht aus wie es nicht zu hart sein sollte, einen einfachen Parser zu erzeugen, mit yacc und Bison und integrieren sie in Ihrem Code.

Ich weiß nicht, über matheval, aber boost :: Geist, das ist ziemlich effizient für Sie tun kann: siehe dort .

Wenn Sie in Metaprogrammierung sind, können Sie einen Blick in haben wollen? boost :: Proto , aber es einige Zeit dauern, um zu beginnen daran zu verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top