Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Fungsi Ahli Kelas C Statik Boleh Digunakan sebagai Panggilan Balik C?

Bagaimanakah Fungsi Ahli Kelas C Statik Boleh Digunakan sebagai Panggilan Balik C?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-14 06:46:13213semak imbas

How Can a Static C   Class Member Function Be Used as a C Callback?

Menggunakan Fungsi Ahli Kelas C Statik sebagai Fungsi Panggilan Balik C

Dalam C , adalah mungkin untuk mendaftarkan fungsi ahli kelas sebagai C fungsi panggil balik, tetapi hanya jika fungsi ahli diisytiharkan sebagai statik.

Penjelasan:

Fungsi ahli bukan statik mempunyai parameter pertama tersirat jenis kelas A* yang sepadan dengan penuding ini. Walau bagaimanapun, fungsi panggil balik C biasanya tidak mempunyai parameter pertama ini. Untuk mendaftarkan fungsi ahli kelas sebagai panggil balik, kita mesti menghapuskan penunjuk ini yang tersirat.

Penyelesaian:

Isytihar fungsi ahli sebagai statik. Ini bermakna fungsi ahli tidak akan mempunyai akses kepada penuding ini.

class A {
  public:
   A();
   ~A();
   static int e(int *k, int *j);
};

A::A()
{
   register_with_library(e)
}

int
A::e(int *k, int *e)
{
  return 0;
}

Pendekatan Alternatif:

Dalam kes yang tidak mungkin atau wajar digunakan fungsi ahli statik, pendekatan alternatif termasuk:

  • Mencipta C biasa fungsi: Takrifkan fungsi C yang berfungsi sebagai proksi untuk fungsi ahli kelas, dan kemudian daftarkan fungsi C sebagai panggil balik.
  • Menggunakan penuding fungsi: Cipta fungsi penunjuk yang menunjuk kepada fungsi ahli kelas dan kemudian mendaftarkan penunjuk fungsi sebagai panggilan balik.
  • Menggunakan lambda ungkapan: C 11 memperkenalkan ungkapan lambda, yang menyediakan cara yang mudah untuk mentakrifkan fungsi tanpa nama. Anda boleh menggunakan ungkapan lambda untuk melaksanakan fungsi panggil balik.

Atas ialah kandungan terperinci Bagaimanakah Fungsi Ahli Kelas C Statik Boleh Digunakan sebagai Panggilan Balik C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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