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!