Cara Melepasi Penunjuk Fungsi Ahli dalam C
Apabila menghantar fungsi ahli kelas kepada fungsi yang menerima penunjuk fungsi ahli, ia adalah penting untuk menyediakan kedua-dua penunjuk kepada objek dan penunjuk kepada fungsi.
Dalam contoh yang diberikan, Fungsi MenuButton::SetButton() memerlukan penunjuk fungsi dengan tandatangan tertentu. Untuk lulus fungsi ahli, anda perlu membekalkan kedua-dua penunjuk objek (ini) dan penunjuk fungsi ahli. Ini boleh dicapai dengan mengubah suai MenuButton::SetButton() seperti berikut:
template <class object> void MenuButton::SetButton(int xPos, int yPos, LPCWSTR normalFilePath, LPCWSTR hoverFilePath, LPCWSTR pressedFilePath, int Width, int Height, object *ButtonObj, void (object::*ButtonFunc)()) { BUTTON::SetButton(xPos, yPos, normalFilePath, hoverFilePath, pressedFilePath, Width, Height); this->ButtonObj = ButtonObj; this->ButtonFunc = ButtonFunc; }
Sekarang, fungsi SetButton() mengambil kedua-dua penuding objek dan penuding fungsi sebagai parameter.
Dalam kelas testMenu, fungsi ahli boleh diluluskan seperti ini:
testMenu::testMenu() :MenuScreen("testMenu") { x.SetButton(100,100,TEXT("buttonNormal.png"), TEXT("buttonHover.png"), TEXT("buttonPressed.png"), 100, 40, this, &testMenu::test2); draw = false; }
Ini menyediakan objek dan ahli yang diperlukan penunjuk fungsi kepada fungsi SetButton(), membolehkannya menggunakan fungsi ahli dengan betul kemudian.
Atas ialah kandungan terperinci Bagaimana untuk Melepasi Penunjuk Fungsi Ahli C dengan Betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!