Maison >développement back-end >C++ >Comment passer des pointeurs de fonctions membres vers des fonctions externes en C ?

Comment passer des pointeurs de fonctions membres vers des fonctions externes en C ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-29 06:25:14734parcourir

How to Pass Member Function Pointers to External Functions in C  ?

Passer des pointeurs de fonctions membres à des fonctions externes

Passer des pointeurs de fonctions membres en tant qu'arguments à des fonctions externes peut être délicat, en particulier lorsqu'il s'agit de types de classe . Cette question se concentre sur un scénario spécifique dans lequel une fonction membre d'une classe doit être transmise à une fonction qui attend un pointeur de fonction membre.

Pour y parvenir, la fonction externe nécessite à la fois un pointeur vers l'objet et un pointeur vers la fonction membre. Dans l'extrait de code donné, la fonction externe MenuButton::SetButton() prend un pointeur vers l'objet en tant que ButtonObj et un pointeur vers la fonction membre en tant que ButtonFunc.

La solution implique de transmettre à la fois le pointeur d'objet et le membre. pointeur de fonction vers MenuButton::SetButton(). Dans la classe testMenu fournie, le constructeur appelle x.SetButton(...) et le transmet comme pointeur d'objet et test2 comme pointeur de fonction membre. Cela garantit que lorsque la fonction externe est appelée, elle a accès à la fois à l'objet et à sa fonction membre.

Voici le code modifié :

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

Dans la fonction externe MenuButton::SetButton (), le pointeur d'objet et le pointeur de fonction membre peuvent être utilisés pour appeler la fonction membre en utilisant la syntaxe ((ButtonObj)->*(ButtonFunc))();.

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