Maison > développement back-end > C++ > Comment transmettre correctement les pointeurs de fonction membre C ?

Comment transmettre correctement les pointeurs de fonction membre C ?

Patricia Arquette
Libérer: 2024-12-04 04:50:13
original
878 Les gens l'ont consulté

How to Pass C   Member Function Pointers Correctly?

Comment transmettre des pointeurs de fonction membre en C

Lorsque vous passez une fonction membre de classe à une fonction qui accepte un pointeur de fonction membre, il est essentiel pour fournir à la fois un pointeur vers l'objet et un pointeur vers la fonction.

Dans l'exemple donné, la fonction MenuButton::SetButton() nécessite un pointeur de fonction avec une certaine signature. Pour transmettre une fonction membre, vous devez fournir à la fois le pointeur d'objet (this) et le pointeur de fonction membre. Ceci peut être réalisé en modifiant MenuButton::SetButton() comme suit :

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

Maintenant, la fonction SetButton() prend à la fois le pointeur d'objet et le pointeur de fonction comme paramètres.

Dans la classe testMenu, la fonction membre peut être passée comme ceci :

testMenu::testMenu()
  :MenuScreen("testMenu")
{
  x.SetButton(100,100,TEXT("buttonNormal.png"), TEXT("buttonHover.png"),
        TEXT("buttonPressed.png"), 100, 40, this, &testMenu::test2);
  draw = false;
}
Copier après la connexion

Cela fournit les pointeurs d'objet et de fonction membre nécessaires vers SetButton() fonction, lui permettant d'invoquer correctement la fonction membre plus tard.

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