首页 > 后端开发 > 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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板