Maison > développement back-end > C++ > Comment passer un pointeur de fonction membre C vers une fonction externe ?

Comment passer un pointeur de fonction membre C vers une fonction externe ?

DDD
Libérer: 2024-11-27 05:56:13
original
515 Les gens l'ont consulté

How to Pass a C   Member Function Pointer to an External Function?

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;
}
Copier après la connexion

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;
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal