首頁 >後端開發 >C++ >如何將類別成員函數指標傳遞給 C 中的外部函數?

如何將類別成員函數指標傳遞給 C 中的外部函數?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-03 19:19:10730瀏覽

How Can I Pass a Class Member Function Pointer to an External Function in C  ?

使用類別物件傳遞成員函數指標

嘗試將類別中的成員函數傳遞給需要成員函數的外部函數時指針,了解必要的步驟至關重要。本文討論了一個特定場景,其中類別成員函數被傳遞給單獨類別中的函數。

在提供的程式碼中,testMenu 類別包含一個名為 test2() 的成員函數和一個呼叫 SetButton 的 MenuButton ()。挑戰在於使用 this 指標正確傳遞 test2() 函數指標。

解決此問題的關鍵是為外部函數提供指向物件的指標和指向內部特定函數的指標物件。在 MenuButton::SetButton() 的修改版本中:

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;
}

物件和函數指標儲存在 MenuButton 物件中。然後可以使用兩個指標來呼叫函數:

((ButtonObj)->*(ButtonFunc))();

最後,在testMenu 類別建構子中,設定MenuButton 時,將指標傳遞給testMenu 物件至關重要:

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

透過合併這些修改,可以成功傳遞成員函數指針,從而允許外部函數存取並執行testMenu 內所需的成員函數類別。

以上是如何將類別成員函數指標傳遞給 C 中的外部函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn