首页 >后端开发 >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