2017-06-22 5 views
0

私は科学計算をするときに、通常、私は自分の質問を解決するために別の方法を使いたいという機会に遭遇します。私は関数ポインタが私にとって良いツールになると思います。しかし、これらのメソッドは通常、しきい値などの独自のパラメータを持っています。それらをすべて指すために関数ポインタを使うことはできますか?つまり、C関数ポインタのいくつかのパラメータを隠すことができますか?私はfortranが別の変数を持っていることを知っているし、matlabもそれをサポートすることができます。 例:Cファンクションポイントが一部の変数を隠している

float method_a(float *mod, int N, double pa); 
    float method_b(float *mod, int N, float pb1, char *pb2); 
+2

おそらく、引数としてすべての可能な引数を含む構造体ポインタを受け取り、関数の実装で構造体ポインタをデコードする関数ポインタを渡すことができます。 – vtha

+0

後で関数を呼び出す方法を決定できますか? –

答えて

0

実際はありません。 C関数ポインタはアドレスとプロトタイプであり、(概念上のマシン内の)引数がスタックにプッシュされたときにその引数を記述します。プロトタイプを簡単に別のプロトタイプに切り替えることはできません。

実行可能なのは、実行時にCの関数ポインタの上に独自の動的解像度を作成することです。もう1つのトリックは、常にvoid *を関数ポインタに渡してコンテキストを与えることです。関数ポインタを呼び出す関数は、このvoid *を調べることは決してありません。しかし、あなた自身の構造にキャストすることができ、潜在的にどこかの値を切り替えて、可能な関数のリストの1つを呼び出すことができます。

関連する問題