3

最初に問題を説明し、次にライブラリに関して現在調べていることを説明します。

私のアプリケーションでは、常に利用可能な一連の変数があります。例: TOTAL_ITEMS、PRICE、CONTRACTS、ETC (約 15 個あります)。アプリケーションのクライアントは、これらの変数を使用して、特定の計算を実行および表示したいと考えています。今まで、私はそれらの計算を常にアプリに追加してきました。アプリケーションが解析して計算する数式のセットをユーザーが指定できるテンプレートを作成することで、より一般的なものにしたいと思います。

以下に 1 つのケースを示します。

total_cost = CONTRACTS*PRICE*TOTAL_ITEMS

したがって、ユーザーがテンプレートファイルで定義するために、次のようなことをしたいと思います:

total_cost = CONTRACTS*PRICE*TOTAL_ITEMS そして、それを表示する画面のようないくつかのメタ日付。したがって、彼らは画面で式を指定します。ファイルには、この性質の多くの式が含まれます。

今、私は 2 つの図書館を見ています: Spiritmatheval

参考文献、例、リンクだけでなく、このタスクに適したものを誰かが推奨しますか?

質問が不明確な場合はお知らせください。さらに明確にするよう努めます。

ありがとう、

サーシャ

4

3 に答える 3

0

yaccbisonを使用して単純なパーサーを生成し、それをコードに統合するのはそれほど難しいことではないようです。

于 2009-02-27T15:59:15.230 に答える
0

固定数の変数がある場合、パーサーを呼び出すのは少しやり過ぎかもしれません。スピリットはクールですが、プロジェクトで使用したいとずっと思っていました。

おそらく文字列をトークン化し、名前でキー付けされた変数のマップを作成します(すべての変数がintであると仮定します):

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

次に、単純な後置計算関数を使用して実際の計算を行います。

編集:

MathEval を見ると、まさにあなたが望むことをしているようです。変数を設定し、それらの変数を使用して数学関数を評価します。構文パーサーのレベルでソリューションを作成する理由がわかりません。MathEval が満たさない要件はありますか?

于 2009-02-27T16:08:06.660 に答える
0

数学についてはわかりませんが、boost::spirit はかなり効率的にそれを行うことができます:そこを参照してください。

テンプレートのメタプログラミングに興味がある場合は、 Boost::Protoを調べてみたいと思うかもしれませんが、使い始めるには時間かかります。

于 2009-02-27T16:13:11.640 に答える