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!