Kurz gesagt handelt es sich um eine Funktion, die aufgerufen wird. Wenn Sie einen Funktionszeiger (Adresse) als Parameter an eine andere Funktion übergeben und dieser Zeiger zum Aufrufen der Funktion verwendet wird, auf die er zeigt, sagen wir, dass dies
ist.
Warum es verwenden?
Weil der Anrufer und der Angerufene getrennt werden können. Dem Aufrufer ist es egal, wer der Angerufene ist, er muss lediglich wissen, dass es eine aufgerufene Funktion mit einem bestimmten Prototyp und bestimmten Einschränkungen (z. B. einem Rückgabewert von int) gibt.
Wenn Sie wissen möchten, was die -Rückruffunktion in der Praxis bewirkt, nehmen wir zunächst an, dass es eine Situation gibt, in der wir eine Bibliothek schreiben möchten, die bestimmte Implementierungen von
bereitstellt, wie z. B.
, schnelle Sortierung, Shell-Sortierung, Shake-Sortierung usw., aber um die Bibliothek vielseitiger zu machen, möchte ich keine Sortierlogik in die Funktion einbetten und den Benutzern die Implementierung der entsprechenden Logik überlassen Bibliothek, die für eine Vielzahl von
( int, float, string) verwendet werden soll. Was sollen wir zu diesem Zeitpunkt tun? Sie können
verwenden und Rückrufe tätigen.
Rückrufe können für Benachrichtigungsmechanismen verwendet werden. Manchmal muss im Programm ein Timer eingestellt werden. Jedes Mal, wenn eine bestimmte Zeit kommt, erhält das Programm eine entsprechende Benachrichtigung, aber der Implementierer des Benachrichtigungsmechanismus weiß nichts davon Unser Programm. Zu diesem Zeitpunkt benötigen wir einen bestimmten Prototyp
und verwenden diesen Zeiger, um einen Rückruf durchzuführen, um unser Programm darüber zu informieren, dass das -Ereignis aufgetreten ist. Tatsächlich verwendet die SetTimer()-API eine Rückruffunktion, um den Timer zu benachrichtigen, und falls keine Rückruffunktion bereitgestellt wird, sendet sie auch eine Nachricht an
des Programms.
Ein weiterer
, der den Rückrufmechanismus verwendet, ist EnumWindow(), das alle Fenster der obersten Ebene auf dem Bildschirm auflistet, für jedes Fenster eine vom Programm bereitgestellte Funktion aufruft und den Handler des Fensters übergibt. Wenn der Aufgerufene einen Wert zurückgibt, setzen Sie die Iteration fort, andernfalls Beenden. EnumWindow() ist es egal, wo sich der Aufgerufene befindet oder was der Aufgerufene mit dem von ihm übergebenen Handler gemacht hat, es kümmert sich nur um den Rückgabewert, da er basierend auf dem Rückgabewert die Ausführung fortsetzt oder beendet.
In jedem Fall wird die Callback-Funktion von der C-Sprache geerbt. Daher sollten Callbacks in C++ nur beim Einrichten einer Schnittstelle mit C-Code oder beim Umgang mit einer vorhandenen Callback-Schnittstelle verwendet werden. Mit Ausnahme der oben genannten Fälle sollten in C++ statt Callback-Funktionen virtuelle Methoden oder Funktoren verwendet werden.
Das obige ist der detaillierte Inhalt vonWann sollte die Rückruffunktion verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!