Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Lulus Fungsi Ahli Kelas C sebagai Panggilan Balik kepada API?

Bagaimanakah Saya Boleh Lulus Fungsi Ahli Kelas C sebagai Panggilan Balik kepada API?

Barbara Streisand
Lepaskan: 2024-12-24 10:15:37
asal
196 orang telah melayarinya

How Can I Pass a C   Class Member Function as a Callback to an API?

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

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

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

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!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan