Rumah >pembangunan bahagian belakang >C++ >Bolehkah Fungsi Ahli Kelas C Digunakan sebagai Fungsi Panggilan Balik C?

Bolehkah Fungsi Ahli Kelas C Digunakan sebagai Fungsi Panggilan Balik C?

Patricia Arquette
Patricia Arquetteasal
2024-12-11 17:42:13309semak imbas

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

Menggunakan Fungsi Ahli Kelas C sebagai Fungsi Panggilan Balik C

Adalah mungkin untuk mendaftarkan fungsi ahli kelas C sebagai fungsi panggil balik C , tetapi terdapat keperluan tertentu untuk dipenuhi.

S1: Pertama sekali adakah mungkin untuk mendaftarkan fungsi ahli kelas C seperti Saya cuba lakukan dan jika ya bagaimana?

J1: Ya, adalah mungkin untuk mendaftarkan fungsi ahli kelas C sebagai fungsi panggil balik jika fungsi itu diisytiharkan sebagai fungsi statik. Fungsi ahli statik tidak mempunyai penunjuk 'ini' tersirat sebagai hujah pertama mereka, tidak seperti fungsi ahli bukan statik. Ini membolehkan mereka serasi dengan tandatangan fungsi panggil balik C.

S2: Adakah terdapat cara alternatif/lebih baik untuk menangani perkara ini?

A2: Berikut adalah beberapa pilihan alternatif:

  • Buat fungsi percuma: Laksanakan percuma yang berasingan fungsi (bukan ahli) yang sepadan dengan tandatangan fungsi panggil balik dan kemudian daftarkannya dengan pustaka.
  • Gunakan penuding fungsi: Cipta penuding fungsi kepada fungsi ahli statik kelas C dan hantar penunjuk fungsi ke perpustakaan. Ini memerlukan perpustakaan menyokong penggunaan penuding fungsi sebagai fungsi panggil balik.
  • Gunakan fungsi pembalut: Tentukan fungsi pembalut di luar kelas yang memanggil fungsi ahli kelas yang dikehendaki dan mempunyai tandatangan yang serasi dengan fungsi panggil balik C. Kemudian, daftarkan fungsi pembungkus dengan perpustakaan.

Contoh Menggunakan Fungsi Ahli Statik:

class A {
public:
    A() { register_with_library(&A::e); }
    ~A() {}

    static int e(int *k, int *j) {
        return 0;
    }
};

Atas ialah kandungan terperinci Bolehkah Fungsi Ahli Kelas C Digunakan sebagai Fungsi 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