Heim >Backend-Entwicklung >C++ >Wie können Rückrufe die Funktionalität von C-Code verbessern?

Wie können Rückrufe die Funktionalität von C-Code verbessern?

DDD
DDDOriginal
2024-12-10 18:22:12549Durchsuche

How Can Callbacks Enhance C   Code Functionality?

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!

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