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