Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Melepasi Penunjuk Fungsi Ahli C dengan Betul?

Bagaimana untuk Melepasi Penunjuk Fungsi Ahli C dengan Betul?

Patricia Arquette
Patricia Arquetteasal
2024-12-04 04:50:13861semak imbas

How to Pass C   Member Function Pointers Correctly?

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!

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