私はC++でいくつかの物理シミュレーションコードを作成しましたが、入力テキストファイルの解析がボトルネックになっています。入力パラメータの1つとして、ユーザーは実行時に何度も評価される数学関数を指定する必要があります。C ++コードには、このためのいくつかの事前定義された関数クラス(実際には数学側では非常に複雑です)といくつかの制限された解析機能がありますが、この構造にはまったく満足していません。
私が必要としているのは、アルゴリズムと関数の評価の両方が高速なままであるため、両方をコンパイル済みコードとして(できれば、数学関数をC ++関数オブジェクトとして)保持することが有利です。ただし、シミュレーション全体をPythonと一緒に接着することを考えました。ユーザーは、Pythonスクリプトで入力パラメーターを指定できると同時に、Pythonでストレージ、結果の視覚化(matplotlib)、およびGUIも実装できます。
ほとんどの場合、C ++クラスの公開は、たとえばSWIGを使用して実行できることを知っていますが、Pythonでのユーザー定義の数学関数の解析に関してはまだ質問があります。
どういうわけかPythonでC++関数オブジェクトを作成し、それをC ++アルゴリズムに渡すことは可能ですか? たとえば、私が電話するとき
f = WrappedCPPGaussianFunctionClass(sigma=0.5)
WrappedCPPAlgorithm(f)
Pythonでは、C ++オブジェクトへのポインタを返し、そのポインタを必要とするC ++ルーチン、または同様のものに渡されます...(この場合、メモリ管理については聞かないでください:S)
重要なのは、アルゴリズム内のPythonコードに対してコールバックを行わないことです。後で、この例を拡張して、関数の合計や積など、Python側でいくつかの単純な式の解析を行い、C ++オブジェクトのような複合解析ツリーを返しますが、ここでは基本にとどまります。
長い投稿と事前の提案のためのthxをお詫び申し上げます。