Maison >développement back-end >C++ >Comment les rappels améliorent-ils la flexibilité et la personnalisation en C ?

Comment les rappels améliorent-ils la flexibilité et la personnalisation en C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-29 01:41:11645parcourir

How Do Callbacks Enhance Flexibility and Customization in C  ?

Rappels en C

Un rappel est un objet callable qui est passé en argument à une fonction ou une classe , permettant de personnaliser le comportement en fonction de la fonction de rappel spécifique.

Raisons d'utilisation Rappels :

  • Écriture de code générique pouvant fonctionner avec différentes logiques fournies par le rappel
  • Notification des appelants de certains événements, offrant une flexibilité au moment de l'exécution
  • Activation comportement dynamique pendant l'exécution

Callables en C 11 :

  • Pointeurs de fonction (y compris les pointeurs vers les fonctions membres)
  • std::objets de fonction
  • Expressions lambda
  • Expressions de liaison
  • Objets fonction (classes avec appel de fonction surchargé Operator())

Pointeurs de fonction d'écriture :

int (*)(int); // Function pointer type taking one int argument, returning int
int (* foo_p)(int) = &foo; // Initialize pointer to function foo

Notation d'appel :

int foobar(int x, int (*moo)(int));
foobar(a, &foo); // Call foobar with pointer to foo as callback

std::fonction Objets :

std::function<int(int)> stdf_foo = &amp;foo;

Notation d'appel :

int stdf_foobar(int x, std::function<int(int)> moo);
stdf_foobar(a, stdf_foo);

Expressions lambda :

stdf_foobar(a, [c](int x) -> int { return 7+c*x; });

std::bind Expressions :

int nine_x_and_y (int x, int y) { return 9*x + y; }
stdf_foobar(a, std::bind(nine_x_and_y, _1, 3));

Modèles de rappel :

template<class R, class T>
void stdf_transform_every_int_templ(int * v,
  unsigned const n, std::function<R(T)> fp) {...}

Notation d'appel :

stdf_transform_every_int_templ<int,int&amp;>(&amp;a[0], 5, &amp;woof);

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn