首頁 > 後端開發 > C++ > 如何在 C 中正確傳遞成員函數指標?

如何在 C 中正確傳遞成員函數指標?

Mary-Kate Olsen
發布: 2024-12-05 08:52:10
原創
268 人瀏覽過

How Can I Correctly Pass Member Function Pointers in C  ?

在 C 中傳遞成員函數指標

在物件導向程式設計中,通常需要將成員函數作為參數傳遞給另一個函數。但是,正確執行此操作可能有點棘手,尤其是在使用 this 指標時。

讓我們考慮提供的程式碼片段中的一個特定範例:

class testMenu : public MenuScreen {
  // ...
  void test2() {
    draw = true;
  }
};

MenuButton<testMenu> x;

testMenu() : MenuScreen("testMenu") {
  x.SetButton(100, 100, ..., &test2);
}
登入後複製

這裡是test2 成員函數使用SetButton 函數分配給MenuButton 的ButtonFunc 成員:

template <class object>
void MenuButton::SetButton(..., void (object::*ButtonFunc)()) {
  this->ButtonFunc = &ButtonFunc;
}
登入後複製

呼叫MenuButton 類別中的test2 函數。為此,我們需要一個指向物件的指標(即 testMenu)和一個指向函數的指標(即 &test2)。在 SetButton 的修改版本中:

template <class object>
void MenuButton::SetButton(..., object *ButtonObj, void (object::*ButtonFunc)()) {
  this->ButtonObj = ButtonObj;
  this->ButtonFunc = ButtonFunc;
}
登入後複製

我們傳遞對物件的引用,可以使用 ButtonObj 指標存取該物件。然後使用 ((ButtonObj)->*(ButtonFunc))() 呼叫成員函數指標。

最後,修正後的 testMenu 建構子:

testMenu() : MenuScreen("testMenu") {
  x.SetButton(100, 100, ..., this, &test2);
}
登入後複製

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板