Melalui Fungsi Ahli Kelas sebagai Panggilan Balik
Dalam cuba menghantar fungsi ahli kelas sebagai panggilan balik kepada API, anda mungkin menghadapi ralat kompilasi kerana senarai hujah yang hilang. Untuk menyelesaikan isu ini, adalah disyorkan untuk menggunakan penuding fungsi atau ungkapan lambda yang menangkap tika kelas.
Penunjuk Fungsi
Mesej ralat mencadangkan penggunaan '&CLoggersInfra:: RedundancyManagerCallBack' untuk mencipta penunjuk kepada ahli. Ini kerana fungsi ahli kelas biasanya mengambil dua parameter: parameter pertama ialah penunjuk kepada contoh kelas, dan parameter kedua ialah hujah fungsi.
void (CLoggersInfra::*ptr)(int); // Function pointer type ptr = &CLoggersInfra::RedundancyManagerCallBack;
Walau bagaimanapun, pendekatan penunjuk fungsi memerlukan anda untuk menyatakan secara eksplisit parameter pertama, yang mungkin tidak praktikal dalam semua senario.
Ungkapan Lambda (C 11 dan Kemudian)
Ekspresi Lambda menyediakan cara yang lebih ringkas dan fleksibel untuk menangkap contoh kelas dan mencipta fungsi panggil balik:
auto lambda = [this](int arg) { this->RedundancyManagerCallBack(arg); };
Ekspresi lambda ini menangkap 'ini' penunjuk dan mentakrifkan fungsi tanpa nama yang mengambil hujah integer 'arg'. Anda kemudiannya boleh menghantar lambda sebagai panggilan balik:
m_cRedundencyManager->Init(lambda);
Kesimpulan
Dengan menggunakan penunjuk fungsi atau ungkapan lambda, anda boleh menghantar fungsi ahli kelas dengan cekap sebagai panggilan balik sambil mematuhi keperluan API dan mengelakkan ralat penyusunan. Ungkapan Lambda amat sesuai dalam versi C 11 dan yang lebih baru, kerana ia memudahkan penangkapan tika kelas.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Lulus Fungsi Ahli Kelas C sebagai Panggilan Balik kepada API?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!