関数を引数とする方法?
いつもお世話になっています。
MFCでプログラムをしています。
今、任意の関数(Func1)を
積分する関数(Func2)を作っています。
現在は、被積分関数の数だけ、
積分関数(Func2)を書いているのですが、
非効率的なので、なるべく汎用性を持たせたいと
考えています。
参考書(新C言語入門シニア編)の該当個所で、
クラスでない通常の関数を引数とする場合は、
うまくいったのですが、
クラスのメンバ関数を引数とした場合、
どうしてもコンパイルエラーが
発生してしまいます。
関数Func、I及びエラーメッセージは大凡次のとおりです。今のところ、引数とする関数(Func1)の引数は、
同一個数としています。
<被積分関数の例>
double ClassA::Func1 (double a){
return a * 10;
}
<積分関数>
double ClassA::Func2 (double (*f)(double), double a, double b){
return b * f(a);
}
void classA::Integration()
{
...
Func2(Func1,a,b);
...
}
<エラーメッセージ>
classA::Integrationの呼び出し箇所で、
「1番目の引数を
double(double)からdouble(__cdecl)(double)に
変換できません」
と出ます。
double(double)の部分は合っているようなのですが、
(__cdecl)の部分が違うということまでは
分かりました。
メンバ関数であることが原因のようなので、
Func2での引数宣言を
double ClassA::Func2 (double (ClassA::*f)(double), double a, double b){
return b * f(a);
}
に変えてみたところ、
引数受け渡しのところはクリアするのですが、
Func2(Func1,a,b);
の呼び出し時に、Func2が関数ではないという
エラーがでます。
アドバイス又は参考URL等を
教えていただければ助かります。
よろしくお願いします。
お礼
単なる文字列として認識されていたのですね 勉強になりました。 どうもありがとうございます。 とても速い回答で大変助かりました。