Maison > développement back-end > C++ > Comment puis-je transmettre un pointeur de fonction membre de classe vers une fonction externe en C ?

Comment puis-je transmettre un pointeur de fonction membre de classe vers une fonction externe en C ?

Mary-Kate Olsen
Libérer: 2024-12-03 19:19:10
original
726 Les gens l'ont consulté

How Can I Pass a Class Member Function Pointer to an External Function in C  ?

Passer des pointeurs de fonction membre avec des objets de classe

Lors de la tentative de transmission d'une fonction membre au sein d'une classe à une fonction externe qui nécessite une fonction membre pointeur, il est essentiel de comprendre les étapes nécessaires. Cet article traite d'un scénario spécifique dans lequel une fonction membre de classe est transmise à une fonction dans une classe distincte.

Dans le code fourni, la classe testMenu comprend une fonction membre appelée test2() et un MenuButton qui appelle SetButton. (). Le défi réside dans le passage correct du pointeur de fonction test2() à l'aide du pointeur this.

La clé pour résoudre ce problème est de fournir à la fonction externe à la fois un pointeur vers l'objet et un pointeur vers la fonction spécifique à l'intérieur. l'objet. Dans la version modifiée de 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;
}
Copier après la connexion

Les pointeurs d'objet et de fonction sont stockés dans l'objet MenuButton. La fonction peut ensuite être invoquée à l'aide des deux pointeurs :

((ButtonObj)->*(ButtonFunc))();
Copier après la connexion

Enfin, au sein du constructeur de la classe testMenu, lors de la définition du MenuButton, il est crucial de passer un pointeur vers l'objet testMenu :

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 incorporant ces modifications, le pointeur de fonction membre peut être transmis avec succès, permettant à la fonction externe d'accéder et d'exécuter la fonction membre souhaitée dans le testMenu classe.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal