Member-Funktionszeiger an externe Funktionen übergeben
Member-Funktionszeiger als Argumente an externe Funktionen übergeben, kann schwierig sein, insbesondere beim Umgang mit Klassentypen . Diese Frage konzentriert sich auf ein bestimmtes Szenario, in dem eine Mitgliedsfunktion einer Klasse an eine Funktion übergeben werden muss, die einen Zeiger auf eine Mitgliedsfunktion erwartet.
Um dies zu erreichen, benötigt die externe Funktion sowohl einen Zeiger auf das Objekt als auch einen Zeiger auf die Memberfunktion. Im angegebenen Codeausschnitt übernimmt die externe Funktion MenuButton::SetButton() einen Zeiger auf das Objekt als ButtonObj und einen Zeiger auf die Memberfunktion als ButtonFunc.
Die Lösung besteht darin, sowohl den Objektzeiger als auch das Member zu übergeben Funktionszeiger auf MenuButton::SetButton(). In der bereitgestellten Klasse testMenu ruft der Konstruktor x.SetButton(...) auf und übergibt dies als Objektzeiger und test2 als Mitgliedsfunktionszeiger. Dadurch wird sichergestellt, dass die externe Funktion beim Aufruf sowohl auf das Objekt als auch auf seine Mitgliedsfunktion zugreifen kann.
Hier ist der geänderte Code:
testMenu::testMenu() :MenuScreen("testMenu") { x.SetButton(100,100,TEXT("buttonNormal.png"), TEXT("buttonHover.png"), TEXT("buttonPressed.png"), 100, 40, this, &testMenu::test2); draw = false; }
Innerhalb der externen Funktion MenuButton::SetButton () können der Objektzeiger und der Mitgliedsfunktionszeiger verwendet werden, um die Mitgliedsfunktion mithilfe der Syntax aufzurufen ((ButtonObj)->*(ButtonFunc))();.
Das obige ist der detaillierte Inhalt vonWie übergebe ich Memberfunktionszeiger an externe Funktionen in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!