1

私は基本機能を持っています

int base(const int i, const double &x)

この関数ではi、「パラメータ」(0 から N-1 までの定義済みの値を取ることができる)xと見なし、実際の「引数」(任意の値を取ることができる) と見なします。

必要なのは、関数ポインタの配列を作成することint (*pointers[N])(const double &x)です。配列の各メンバーはパラメーターの異なる値に対応するため、i各呼び出しは呼び出しpointers[n](x)と同等である必要がありますbase(n, x)

この機能を実現する方法はありますか?

私はファンクターについて自分自身を教育しようとしてきました(これは行くべきですか?)そして最近も調べましstd::bindたが、私の理解では、それはC ++ 11でのみ機能するということです(現在使用できません)。

アドバイスやコードスニペットは本当に役に立ちます。ありがとう!

4

1 に答える 1

1

そのために非キャプチャラムダを使用できます。

typedef int (*fp)(double);

fp p1 = [](double x) -> int { return base(1, x); };
fp p2 = [](double x) -> int { return base(2, x); };
fp p3 = [](double x) -> int { return base(3, x); };

これはラムダのキャプチャには機能しないため、プログラムで生成することはできません。これと、C で値ごとに 1 つの関数を綴ることの間に本質的な違いはありません。

int f1(double x) { return base(1, x); }
fp p = f1;
于 2013-02-20T23:55:24.210 に答える