可能性の重複:
How do function pointers work?関数をパラメータとしてどのように渡しますか?
どのようにパラメータとして関数を渡すのですか?
また、別のクラスの関数をパラメータとして渡すことはできますか?
可能性の重複:
How do function pointers work?関数をパラメータとしてどのように渡しますか?
どのようにパラメータとして関数を渡すのですか?
また、別のクラスの関数をパラメータとして渡すことはできますか?
関数ポインタを渡す必要があります。構文はそれほど難しくありません。また、cとC++で関数ポインタを使用する方法の完全な内訳を提供する素晴らしいページhereがあります。
そのページ(http://www.newty.de/fpt/fpt.html)から:
//------------------------------------------------------------------------------------
// 2.6 How to Pass a Function Pointer
// <pt2Func> is a pointer to a function which returns an int and takes a float and two char
void PassPtr(int (*pt2Func)(float, char, char))
{
int result = (*pt2Func)(12, 'a', 'b'); // call using function pointer
cout << result << endl;
}
// execute example code - 'DoIt' is a suitable function like defined above in 2.1-4
void Pass_A_Function_Pointer()
{
cout << endl << "Executing 'Pass_A_Function_Pointer'" << endl;
PassPtr(&DoIt);
}
ありがとう、私は家に帰るときにこれを試してみます – user1338743
二つの方法があります。
1つは関数ポインタ@dusktreaderのアウトラインです。
functors、または関数のパラメータでoperator()
をオーバーロードし、クラスのインスタンスを渡すクラスを定義する関数オブジェクトを使用します。
私は常に後者がより直感的であることを発見しましたが、どちらかを実行します。
Functorsはテンプレート関数に渡されたときにのみ動作します。 –
@MarkRansom関数オブジェクトは、 'virtual'を介して共通ベースと動的ディスパッチを使用することもできます。 – justin
@MarkRansomは 'std :: functions'ではありません。 – juanchopanza
関数ポインタ以外にも、std::function and std::bind(またはC++ 11がない場合はboost
相当)を使用できます。そして、あなたは、たとえば、それをその署名と一致したものを渡すことができ
double foo(std::function<double(int, int)> f) {
return 100*f(5,89);
}
:あなたは2つのintを取り、doubleを返すstd::function
をとる、この関数を定義するようなものを行うことができますので、これらは、polimorphic関数ラッパーを提供します。
struct Adder {
double bar(double a, double b) { return a+b;}
};
int main() {
using namespace std::placeholders;
Adder addObj;
auto fun = std::bind(&AdderC::bar, &addObj, _1, _2); // auto is std::function<double(int,int)>
std::cout << foo(fun) << "\n"; // gets 100*addObj.bar(5,89)
}
これらは両方とも強力で使いやすく、役に立たない例で誤解されることはありません。プレーン関数、静的関数、メンバ関数、静的メンバ関数、ファンクタをラップすることができます。
ルックアップコールバック。 –
他のものをパラメータとして渡すのと同じ方法です。あなたはそれを渡したい関数の名前の後に括弧の中にその名前を入れます。どちらの部分に問題がありますか?うーん - タイトルは本当にそれをすべて言っていないでしょうか? –