Heim > Backend-Entwicklung > C++ > Wie funktionieren Rückrufe in C und welche verschiedenen Verwendungszwecke gibt es?

Wie funktionieren Rückrufe in C und welche verschiedenen Verwendungszwecke gibt es?

Mary-Kate Olsen
Freigeben: 2024-12-14 06:20:11
Original
348 Leute haben es durchsucht

How Do Callbacks Work in C  , and What Are Their Various Uses?

Rückrufe und ihre verschiedenen Verwendungen in C

In C ist ein Rückruf ein aufrufbarer Wert (später besprochen), der von einer Klasse oder Funktion akzeptiert wird. Wird verwendet, um die aktuelle Logik basierend auf dem bereitgestellten Rückruf anzupassen.

Gründe für die Verwendung Rückrufe:

  • Zum Schreiben von generischem Code unabhängig von der Logik in der aufgerufenen Funktion, der die Wiederverwendung mit verschiedenen Rückrufen ermöglicht.
  • Um Aufrufer über bestimmte Ereignisse zu benachrichtigen und Statik und Kompilierung zu ermöglichen -Zeitflexibilität.

Was sind Callables in C ?

  • Funktionszeiger (einschließlich Zeiger auf Mitgliedsfunktionen)
  • std::function object
  • Lambda-Ausdrücke
  • Bindungsausdrücke
  • Funktionsobjekte (Klassen mit überladenem Funktionsaufrufoperator). Operator())

Rückrufe schreiben und aufrufen:

Funktionszeiger:

  • Typ-Notation: return_type (*)(parameter_type_1, parameter_type_2, parameter_type_3)
  • Callback Call Notation: function_pointer(argument)
  • Callback Use Notation: function(argument_list, function_pointer)

Zeiger auf Mitglied Funktion:

  • Typnotation: return_type (class_type::*)(parameter_type_1, parameter_type_2, parameter_type_3)
  • Callback Call Notation: (class_instance.*member_function_pointer)(argument)
  • Callback Use Notation: function(argument_list, class_instance, member_function_pointer)

std::function Objekte:

  • Typnotation: std::function
  • Callback Call Notation : function_object()
  • Callback Use Notation: function(argument_list, function_object)

Beispiele für die Verwendung von std::function:

Verallgemeinern Code:

template<class R, class T>
void stdf_transform_every_int_templ(int *v, unsigned const n, std::function<R(T)> fp) {
  for (unsigned i = 0; i < n; ++i) {
    v[i] = fp(v[i]);
  }
}
Nach dem Login kopieren

Templatete Rückrufe:

template<class F>
void transform_every_int_templ(int *v, unsigned const n, F f) {
  for (unsigned i = 0; i < n; ++i) {
    v[i] = f(v[i]);
  }
}
Nach dem Login kopieren

Typnamen-Implementierung:

template <class T>
std::string type_name() {
  typedef typename std::remove_reference<T>::type TR;
  std::unique_ptr<char, void(*)(void*)> own
    (abi::__cxa_demangle(typeid(TR).name(), nullptr,
    nullptr, nullptr), std::free);
  std::string r = own != nullptr?own.get():typeid(TR).name();
  if (std::is_const<TR>::value)
    r += " const";
  if (std::is_volatile<TR>::value)
    r += " volatile";
  if (std::is_lvalue_reference<T>::value)
    r += " &amp;&";
  else if (std::is_rvalue_reference<T>::value)
    r += " &amp;&amp;";
  return r;
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie funktionieren Rückrufe in C und welche verschiedenen Verwendungszwecke gibt es?. 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