在物件導向程式設計中,通常需要將成員函數作為參數傳遞給另一個函數。但是,正確執行此操作可能有點棘手,尤其是在使用 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中文網其他相關文章!