Heim >Backend-Entwicklung >C++ >Wie kann ich einen Funktionszeiger eines Klassenmitglieds an eine externe Funktion in C übergeben?

Wie kann ich einen Funktionszeiger eines Klassenmitglieds an eine externe Funktion in C übergeben?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-03 19:19:10784Durchsuche

How Can I Pass a Class Member Function Pointer to an External Function in C  ?

Übergabe von Member-Funktionszeigern mit Klassenobjekten

Beim Versuch, eine Member-Funktion innerhalb einer Klasse an eine externe Funktion zu übergeben, die eine Member-Funktion erfordert Zeiger ist es wichtig, die notwendigen Schritte zu verstehen. Dieser Artikel befasst sich mit einem bestimmten Szenario, in dem eine Klassenmitgliedsfunktion an eine Funktion in einer separaten Klasse übergeben wird.

Im bereitgestellten Code enthält die testMenu-Klasse eine Mitgliedsfunktion namens test2() und einen MenuButton, der SetButton aufruft (). Die Herausforderung besteht darin, den test2()-Funktionszeiger mithilfe des this-Zeigers korrekt zu übergeben.

Der Schlüssel zur Lösung dieses Problems besteht darin, der externen Funktion sowohl einen Zeiger auf das Objekt als auch einen Zeiger auf die spezifische Funktion darin bereitzustellen das Objekt. In der modifizierten Version von 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;
}

Die Objekt- und Funktionszeiger werden im MenuButton-Objekt gespeichert. Die Funktion kann dann mit beiden Zeigern aufgerufen werden:

((ButtonObj)->*(ButtonFunc))();

Schließlich ist es im testMenu-Klassenkonstruktor beim Festlegen des MenuButtons wichtig, einen Zeiger auf das testMenu-Objekt zu übergeben:

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

Durch die Einbindung dieser Änderungen kann der Member-Funktionszeiger erfolgreich übergeben werden, sodass die externe Funktion auf die gewünschte Member-Funktion im testMenu zugreifen und diese ausführen kann Klasse.

Das obige ist der detaillierte Inhalt vonWie kann ich einen Funktionszeiger eines Klassenmitglieds an eine externe Funktion in C übergeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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