Heim > Backend-Entwicklung > C++ > Wie übergebe ich C-Member-Funktionszeiger korrekt?

Wie übergebe ich C-Member-Funktionszeiger korrekt?

Patricia Arquette
Freigeben: 2024-12-04 04:50:13
Original
861 Leute haben es durchsucht

How to Pass C   Member Function Pointers Correctly?

So übergeben Sie Mitgliedsfunktionszeiger in C

Bei der Übergabe einer Klassenmitgliedsfunktion an eine Funktion, die einen Mitgliedsfunktionszeiger akzeptiert, ist dies von entscheidender Bedeutung um sowohl einen Zeiger auf das Objekt als auch einen Zeiger auf die Funktion bereitzustellen.

Im gegebenen Beispiel erfordert die Funktion MenuButton::SetButton() a Funktionszeiger mit einer bestimmten Signatur. Um eine Member-Funktion zu übergeben, müssen Sie sowohl den Objektzeiger (this) als auch den Member-Funktionszeiger angeben. Dies kann erreicht werden, indem MenuButton::SetButton() wie folgt geändert wird:

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;
}
Nach dem Login kopieren

Jetzt übernimmt die SetButton()-Funktion sowohl den Objektzeiger als auch den Funktionszeiger als Parameter.

In In der testMenu-Klasse kann die Mitgliedsfunktion wie folgt übergeben werden:

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

Dies stellt die erforderlichen Objekt- und Mitgliedsfunktionszeiger für die SetButton()-Funktion bereit und ermöglicht dies um die Memberfunktion später korrekt aufzurufen.

Das obige ist der detaillierte Inhalt vonWie übergebe ich C-Member-Funktionszeiger korrekt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage