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
Mary-Kate Olsenoriginal
2024-12-03 19:19:10728parcourir

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;
}

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))();

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;
}

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!

Déclaration:
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