Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Panggilan Balik Boleh Meningkatkan Kefungsian Kod C?

Bagaimanakah Panggilan Balik Boleh Meningkatkan Kefungsian Kod C?

DDD
Lepaskan: 2024-12-10 18:22:12
asal
589 orang telah melayarinya

How Can Callbacks Enhance C   Code Functionality?

Panggil balik dalam C

Panggil balik ialah objek boleh panggil yang diterima oleh fungsi atau kelas, digunakan untuk menyesuaikan logik semasa berdasarkan panggilan balik.

Bila nak guna Panggilan balik:

  • Menulis kod generik bebas daripada logik fungsi yang dipanggil.
  • Mendayakan gelagat masa jalan dinamik (mis., menukar fungsi butang dalam permainan).
  • Memberitahu pemanggil tentang acara tertentu.

Boleh Dipanggil dalam C 11:

Panggil balik boleh mengambil pelbagai bentuk, semuanya dianggap "boleh dipanggil":

  • Penunjuk fungsi
  • std::objek fungsi
  • Ekspresi Lambda
  • Ikat ungkapan
  • Objek fungsi (kelas dengan operator panggilan fungsi terlampau beban)

Notasi Panggilan Balik:

1. Penunjuk Fungsi

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

2. Penunjuk kepada Fungsi Ahli

  • 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 Objects

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

4. Panggilan Balik Templat

Ini membenarkan lebih banyak kod generik.

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

Jenis Panggilan Balik Serasi:

  • Penunjuk Fungsi: Fungsi penunjuk
  • std::fungsi Objek: Penunjuk fungsi, ungkapan lambda, ungkapan ikatan, objek fungsi
  • Panggil Balik Bertemplat: Sebarang jenis boleh panggil (cth. , ungkapan lambda, ungkapan ikatan, fungsi objek)

Contoh:

  • Contoh Penunjuk Fungsi:

    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; }
    Salin selepas log masuk
  • std::function Object Contoh:

    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});
    Salin selepas log masuk
  • Contoh Panggilan Balik Bertemplat:

    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));
    Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Panggilan Balik Boleh Meningkatkan Kefungsian Kod C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan