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

Bolehkah Fungsi Ahli Kelas C Digunakan sebagai Panggilan Balik C?

Barbara Streisand
Lepaskan: 2024-12-15 07:36:14
asal
630 orang telah melayarinya

Can C   Class Member Functions Be Used as C Callbacks?

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:

  1. Adakah mungkin untuk mendaftarkan fungsi ahli kelas C sebagai fungsi panggil balik?
  2. Adakah terdapat pendekatan alternatif untuk menyelesaikan masalah ini isu?

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

2. Pendekatan Alternatif:

Sebagai alternatif, anda boleh menggunakan salah satu daripada pendekatan berikut:

  • Buat Fungsi Percuma: Cipta fungsi percuma dengan yang sesuai tandatangan dan panggil fungsi ahli kelas C dari dalamnya. Contohnya:
void e_wrapper(int *k, int *j) {
    A().e(k, j);
}
Salin selepas log masuk
  • Gunakan Penunjuk Fungsi: Takrifkan penunjuk fungsi dan tetapkan alamat fungsi ahli kelas C kepadanya. Contohnya:
int (*ptr)(int *, int *) = &A::e;
register_with_library(ptr);
Salin selepas log masuk

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!

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