はい、C++ では動的変数を使用できないことはわかっています。私が探しているのは回避策です。
考え方は基本的にこれです。私はたくさんの数学的モデルを一緒に持っています。を除いて、それらはすべてまったく同じ形式を持っています。
- いくつかの関数の数学的定義
- 必要な定数: それらの名前、その数、およびその値。
定数の値は実験ごとに変わる可能性がありますが、それ以外はすべて材料モデル自体のプロパティです。モデルの定数パラメーターは、入力ファイルで次の形式で指定されます。
variable_A=2.0
マテリアル モデル (すべての関数を含む) は、Maple を介して抽象的な数式から生成された生成コードを使用して以前に作成され、起動するための優れた GUI 環境がありました。悲しいことに、これは複数の理由で壊れています。他のいくつかの作業の結果、形式的な記述の違いを除いて、モデルはすべてコードがまったく同じになりました。このコードを生成するためのまったく別のプログラム (現在は壊れていて、以前は使用していたもの) を用意する代わりに、より単純な代替手段を探しています。別。ただし、これらのモデルを実装するユーザーは、c++ の知識を持っている必要はありません。そのため、ファイルを調べてさまざまな場所を変更するように依頼することはできましたが、残りのコードに目を通すことなく、そのようにモデルを定義できます。
ユーザーが定義する関数は次のようになります。
double myfunction(double arg1, double arg2, vector arg3 ) \\just an example
{
...
...
double a=database.find_constant("a_const");
double b=database.find_constant("b_const");
return sqrt(a*3+pow(b,2)-a/b)+...; \\still example pseudocode
}
上部の省略記号はかなり醜い (悪いコードではなく、構文が重くて無関係なだけです) ので、エンド ユーザーがそれらを処理する必要はありません。私の問題は、おそらく例を使用してよりよく説明できます。
私の当初の計画は、これが
#define A database.find_constant("a_const")
#define FUNCTION pow(A-2,3)
...
double myfunction(...)
{
...
return FUNCTION;
}
しかし、マクロをネストできないことがわかりました。振り返ってみると明らかですが、余談です。#define A
次に、ステートメントを変更しA
てグローバル変数を作成するだけでよいことに気付きました。それから、グローバル変数を考慮したことで自分自身を殴りました。基本的に、ユーザーが C++ の知識をあまり必要としない 1 つの場所にこれをすべて貼り付けようとする私の試みはすべて、ばかげているか、恐ろしく安全ではありません。
通常、私はそのようなオープンエンドの質問をするのは嫌いですが、頭痛の種になりたくありません. 私はこのプロジェクトに短期間しか取り組んでいないので、なんらかの形式の UI を設計したり、コードを生成したりすることは現実的ではありません。現時点では、「概念実証」に取り組んでいます。
モデルを調べて、関数内の必要な行を直接変更するよりも、これを行うためのより良い方法はありますか?
EDIT:私はこのプロジェクト全体を書いたわけではなく、もともとこのように動作することを意図していませんでした. これらのファイルを生成するために私たちが持っていた元のツールは Maple のコード生成を使用し、関数と変数は優れた GUI で Maple 構文として入力されました。残念ながら、GUI はもう (一貫して) 機能しないようです。バージョンを切り替えると、Maple が返したコードは正しい結果を生成しなくなりました。問題の正確な原因はわかりません。現在、他の方法を模索しています。 . 新しいファイルもたくさん(他の作業の結果として)以前のものよりも似ています。これは、新しい手法の動機の一部です。簡単な方法で一緒に作業するのに数行しか必要ない場合は、コード生成を回避できることを望んでいました。これは「私のために直してください!」ではありません。質問です。これらの他のオプションが何であるかを知りたいだけです。はい、そもそも良い状況ではないことはわかっています。もしこれが最初から計画されていたのであれば、このようにはならないでしょう。しかし、この設定はおそらく一時的なものであり、先に述べたように、何よりも概念実証にすぎません。
うまくいけば、質問は今より明確です。私の問題は、特に使いやすい方法ですべてを 1 か所にグループ化することです。お待ちいただいてありがとうございます。