Maison >développement back-end >C++ >Comment passer un pointeur de fonction membre C vers une fonction externe ?
Passer un pointeur de fonction membre
Dans la programmation orientée objet, les pointeurs de fonction membre sont utilisés pour faire référence aux méthodes de classe. Les transmettre à des fonctions externes peut être difficile.
Dans ce cas, une classe, testMenu, tente de transmettre une fonction membre, test2, à une autre fonction à l'aide d'un pointeur de classe de fonction membre. Cependant, le développeur ne sait pas comment utiliser le pointeur this pour envoyer correctement la fonction.
Pour résoudre ce problème, la fonction réceptrice, SetButton, a besoin de deux paramètres : un pointeur vers l'objet (ButtonObj) et un pointeur vers la fonction (ButtonFunc). Cela permet à la fonction externe d'invoquer la fonction membre en utilisant les deux pointeurs : ((ButtonObj)->*(ButtonFunc))();.
La fonction SetButton modifiée devient :
template <class object> void 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; }
Dans la classe testMenu, le pointeur d'objet est passé à SetButton en utilisant la syntaxe suivante :
testMenu::testMenu() :MenuScreen("testMenu") { x.SetButton(100,100,TEXT("buttonNormal.png"), TEXT("buttonHover.png"), TEXT("buttonPressed.png"), 100, 40, this, test2); draw = false; }
En suivant ces étapes, le pointeur de fonction membre test2 est transmis avec succès à la fonction SetButton, permettant à la fonction externe de l'invoquer si nécessaire.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!