首頁 >後端開發 >C++ >回呼如何增強 C 程式碼功能?

回呼如何增強 C 程式碼功能?

DDD
DDD原創
2024-12-10 18:22:12503瀏覽

How Can Callbacks Enhance C   Code Functionality?

C 中的回調

回呼是函數或類別接受的可調用對象,用於根據回調自訂當前邏輯。

何時使用回呼:

  • 編寫獨立於被呼叫函數邏輯的通用程式碼。
  • 啟用動態執行時間行為(例如,變更遊戲中的按鈕功能)。
  • 通知來電者俱體情況

C 11中的可呼叫:

回呼可以採取各種形式,所有形式都被視為「可呼叫」:

  • 函數指標
  • std ::function物件
  • Lambda表達式
  • 綁定表達式
  • 函數物件(具有重載函數呼叫運算子的類別)

回呼表示法:

1。函數指標

  • typedef return_type (*f_int_t) (int);
  • int (* foo_p)(int) = &foo;
  • int (* foo_p)(int) = &foo;
  • int (* obf ar(int x,int (*moo)(int));
int foobar (int x, f_int_t moo);

2.指向成員函數的指標
  • 2.指向成員函數的指標
  • typedef int (C::* f_C_int_t) (int x);
  • int (C::* C_foo_p)(int) = & C::foo;

int C_foobar (int x, C const &c, int (C::*moo )(int));int C_foobar (int x, C const &c, f_C_int_t moo);

  • 3. std::function 物件

std::function stdf_foo = &foo;std::function stdf_foo = &foo;int stdf_foobar (int x, std::function moo);

    4.模板化回調
  • 這允許更通用的程式碼。

模板 void stdf_transform_every_int_templ(int * v, unsigned const n, std::function fp);模板; void transform_every_int_templ(int * v, unsigned const n, F f);

  • 相容的回呼類型:
  • 函數指標:
  • 功能指標
  • 函數指標: 🎜>std::function 物件:
  • 函數指標、lambda 表達式、綁定表達式、函數物件

模板化回調: 任何可呼叫類型(例如、lambda表達式、綁定表達式、函數物件)

  • 範例:

    void tranform_every_int(int * v, unsigned n, int (*fp)(int));
    int double_int(int x) { return 2*x; }
    int square_int(int x) { return x*x; }
  • 函數指標範例:

    void stdf_tranform_every_int(int * v, unsigned n, std::function<int(int)> fp);
    int a[5] = {1, 2, 3, 4, 5};
    stdf_tranform_every_int(&amp;a[0], 5, Meow{8});
  • std::function物件範例:

    int nine_x_and_y (int x, int y) { return 9*x + y; }
    using std::placeholders::_1;
    stdf_transform_every_int_templ(&amp;a[0], 5, std::bind(nine_x_and_y, _1, 4));
範本化回呼範例:

以上是回呼如何增強 C 程式碼功能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn