Menggunakan Fungsi Ahli Kelas C sebagai Fungsi Panggilan Balik C
Masalah:
Bila cuba mendaftarkan fungsi ahli kelas C sebagai fungsi panggil balik untuk perpustakaan C, pengkompil melemparkan ralat yang menunjukkan bahawa jenis fungsi tidak sepadan dengan tandatangan yang dijangkakan.
Soalan:
Jawapan:
1. Menggunakan Fungsi Ahli Statik:
Ya, adalah mungkin untuk mendaftarkan fungsi ahli kelas C sebagai fungsi panggil balik, tetapi ia mestilah fungsi ahli statik. Fungsi ahli statik tidak mempunyai parameter pertama tersirat dari kelas jenis A*, jadi tandatangan mereka sepadan dengan tandatangan panggil balik yang dijangkakan. Contohnya:
class A { public: static int e(int *k, int *j) { return 0; } }; int main() { register_with_library(A::e); return 0; }
2. Pendekatan Alternatif:
Sebagai alternatif, anda boleh menggunakan salah satu daripada pendekatan berikut:
void e_wrapper(int *k, int *j) { A().e(k, j); }
int (*ptr)(int *, int *) = &A::e; register_with_library(ptr);
Atas ialah kandungan terperinci Bolehkah Fungsi Ahli Kelas C Digunakan sebagai Panggilan Balik C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!