
C のコールバック
コールバックは、関数またはクラスに引数として渡される 呼び出し可能な オブジェクトです。 、特定のコールバックに基づいて動作をカスタマイズできます。 function.
コールバックを使用する理由:
- コールバックによって提供されるさまざまなロジックで動作できる汎用コードを作成する
- 呼び出し元に通知する特定のイベント、実行時の柔軟性を提供
- 実行中の動的な動作を有効にするruntime
C 11 の呼び出し可能オブジェクト:
- 関数ポインター (メンバー関数へのポインターを含む)
- std::function オブジェクト
- ラムダ式
- バインド式
- 関数オブジェクト (オーバーロードされた関数呼び出し Operator() を持つクラス)
関数ポインターの記述:
1 2 | int (*)(int);
int (* foo_p)(int) = &foo;
|
ログイン後にコピー
電話表記法:
1 2 | int foobar(int x, int (*moo)(int));
foobar(a, &foo);
|
ログイン後にコピー
std::function オブジェクト:
1 | std:: function <int(int)> stdf_foo = &foo;
|
ログイン後にコピー
呼び出し表記:
1 2 | int stdf_foobar(int x, std:: function <int(int)> moo);
stdf_foobar(a, stdf_foo);
|
ログイン後にコピー
ラムダ式:
1 | stdf_foobar(a, [c](int x) -> int { return 7+c*x; });
|
ログイン後にコピー
std::bind 式:
1 2 | int nine_x_and_y (int x, int y) { return 9*x + y; }
stdf_foobar(a, std::bind(nine_x_and_y, _1, 3));
|
ログイン後にコピー
テンプレート化されたコールバック:
1 2 3 | template< class R, class T>
void stdf_transform_every_int_templ(int * v,
unsigned const n, std:: function <R(T)> fp) {...}
|
ログイン後にコピー
電話表記法:
1 | stdf_transform_every_int_templ<int,int&>(&a[0], 5, &woof);
|
ログイン後にコピー
以上がコールバックは C の柔軟性とカスタマイズをどのように強化しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。