質問

まず問題について説明し、次にライブラリの観点から私が現在検討していることについて説明します。

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

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

total_cost = CONTRACTS*PRICE*TOTAL_ITEMS

したがって、ユーザーがテンプレート ファイルで定義するようなことをしたいと考えています。

total_cost = CONTRACTS*PRICE*TOTAL_ITEMS そしてそれを表示する画面などのメタデータ。したがって、画面で式を指定することになります。そして、ファイルにはこの種の数式が多数含まれます。

現在、次の 2 つのライブラリを調べています。 精神 そして 数学

このタスクに適したもの、参考資料、例、リンクなどを提案してくれる人はいますか?

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

ありがとう、

サーシャ

役に立ちましたか?

解決

あなたは、変数の固定数を持っている場合は、

は、それは少しやり過ぎパーサを起動することであってもよいです。しかし御霊がクールだと私はプロジェクトでそれを使用したいと思ってきます。

私はおそらくちょうど(すべての変数はint型と仮定)名をキーあなたの変数のマップを作成し、文字列をトークン化なります:

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

次に、実際の計算を行うために、単純な接尾辞電卓機能を使用します。

編集ます:

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

他のヒント

次を使用して単純なパーサーを生成するのはそれほど難しくないようです ヤック そして バイソン そしてそれをコードに統合します。

matheval については知りませんが、boost::spirit を使用するとかなり効率的にそれを行うことができます。見る そこには.

テンプレートのメタプログラミングに興味がある場合は、以下を参照してください。 ブースト::プロト, 、しかしそれは 意思 使い始めるには少し時間がかかります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top