Rückrufe in C
Rückrufe sind aufrufbare Objekte, die von einer Funktion oder Klasse akzeptiert werden und dazu dienen, die aktuelle Logik basierend auf dem Rückruf anzupassen.
Wann zu verwenden Rückrufe:
- Schreiben von generischem Code unabhängig von der Logik der aufgerufenen Funktion.
- Aktivieren dynamischen Laufzeitverhaltens (z. B. Ändern der Schaltflächenfunktionalität in einem Spiel).
- Benachrichtigung von Anrufern über bestimmte Ereignisse.
Callables in C 11:
Rückrufe können verschiedene Formen annehmen, die alle als „aufrufbar“ gelten:
- Funktionszeiger
- std::function object
- Lambda-Ausdrücke
- Bind-Ausdrücke
- Funktionsobjekte (Klassen mit überladenem Funktionsaufrufoperator)
Callback-Notation:
1. Funktionszeiger
- typedef return_type (*f_int_t) (int);
- int (* foo_p)(int) = &foo;
- int foobar (int x, int (*moo)(int));
- int foobar (int x, f_int_t muh);
2. Zeiger auf Mitgliedsfunktion
- typedef int (C::* f_C_int_t) (int x);
- int (C::* C_foo_p)(int) = & C::foo;
- int C_foobar (int x, C const &c, int (C::*moo)(int));
- int C_foobar (int x, C const &c, f_C_int_t moo);
3. std::function Objekte
- std::function stdf_foo = &foo;
- int stdf_foobar (int x, std::function moo);
4. Rückrufe mit Vorlagen
Dies ermöglicht einen allgemeineren Code.
- template void stdf_transform_every_int_templ(int * v, unsigned const n, std::function fp);
- template void transform_every_int_templ(int * v, unsigned const n, F f);
Kompatible Rückruftypen:
-
Funktionszeiger:Funktionszeiger
-
std::function Objekte:Funktionszeiger, Lambda-Ausdrücke, Bindungsausdrücke, Funktionsobjekte
-
Templatete Rückrufe:Jeder aufrufbare Typ (z. B. Lambda-Ausdrücke, Bindungsausdrücke, Funktion). Objekte)
Beispiele:
Funktionszeiger-Beispiel:
std::function Objekt Beispiel:
Beispiel für einen Rückruf mit Vorlage:
Das obige ist der detaillierte Inhalt vonWie können Rückrufe die Funktionalität von C-Code verbessern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!