在面向对象编程中,通常需要将成员函数作为参数传递给另一个函数。但是,正确执行此操作可能有点棘手,尤其是在使用 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中文网其他相关文章!