Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menghantar Penunjuk Fungsi Ahli kepada Fungsi Luaran dalam C?

Bagaimana untuk Menghantar Penunjuk Fungsi Ahli kepada Fungsi Luaran dalam C?

Barbara Streisand
Barbara Streisandasal
2024-11-29 06:25:14734semak imbas

How to Pass Member Function Pointers to External Functions in C  ?

Melalukan Penunjuk Fungsi Ahli ke Fungsi Luaran

Melalukan penunjuk fungsi ahli sebagai argumen kepada fungsi luaran boleh menjadi rumit, terutamanya apabila berurusan dengan jenis kelas . Soalan ini memfokuskan pada senario tertentu di mana fungsi ahli kelas perlu dihantar kepada fungsi yang mengharapkan penuding fungsi ahli.

Untuk mencapai ini, fungsi luaran memerlukan kedua-dua penunjuk ke objek dan penunjuk kepada fungsi ahli. Dalam coretan kod yang diberikan, fungsi luaran MenuButton::SetButton() mengambil penuding ke objek sebagai ButtonObj dan penuding kepada fungsi ahli sebagai ButtonFunc.

Penyelesaian melibatkan menghantar kedua-dua penunjuk objek dan ahli penunjuk fungsi ke MenuButton::SetButton(). Dalam testMenu kelas yang disediakan, pembina memanggil x.SetButton(...) dan menghantar ini sebagai penunjuk objek dan test2 sebagai penunjuk fungsi ahli. Ini memastikan bahawa apabila fungsi luaran dipanggil, ia mempunyai akses kepada kedua-dua objek dan fungsi ahlinya.

Berikut ialah kod yang diubah suai:

testMenu::testMenu()
  :MenuScreen("testMenu")
{
  x.SetButton(100,100,TEXT("buttonNormal.png"), TEXT("buttonHover.png"),
        TEXT("buttonPressed.png"), 100, 40, this, &testMenu::test2);
  draw = false;
}

Dalam fungsi luaran MenuButton::SetButton (), penunjuk objek dan penunjuk fungsi ahli boleh digunakan untuk memanggil fungsi ahli menggunakan sintaks ((ButtonObj)->*(ButtonFunc))();.

Atas ialah kandungan terperinci Bagaimana untuk Menghantar Penunjuk Fungsi Ahli kepada Fungsi Luaran dalam 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