Maison > développement back-end > C++ > Comment les rappels peuvent-ils améliorer la fonctionnalité du code C ?

Comment les rappels peuvent-ils améliorer la fonctionnalité du code C ?

DDD
Libérer: 2024-12-10 18:22:12
original
580 Les gens l'ont consulté

How Can Callbacks Enhance C   Code Functionality?

Rappels en C

Les rappels sont des objets appelables acceptés par une fonction ou une classe, utilisés pour personnaliser la logique actuelle en fonction du rappel.

Quand utiliser Rappels :

  • Écriture de code générique indépendant de la logique de la fonction appelée.
  • Activation du comportement d'exécution dynamique (par exemple, modification de la fonctionnalité d'un bouton dans un jeu).
  • Notifier les appelants d'événements spécifiques.

Callables en C 11 :

Les rappels peuvent prendre diverses formes, toutes considérées comme « appelables » :

  • Pointeurs de fonction
  • std::objets de fonction
  • Expressions lambda
  • Expressions de liaison
  • Objets fonction (classes avec opérateur d'appel de fonction surchargé)

Notation de rappel :

1. Pointeurs de fonction

  • 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 moo);

2. Pointeur vers la fonction membre

  • 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 Objets

  • std::function stdf_foo = &foo;
  • int stdf_foobar (int x, std::function moo);

4. Rappels basés sur un modèle

Cela permet un code plus générique.

  • 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);

Types de rappel compatibles :

  • Pointeurs de fonction : Pointeurs de fonction
  • std::function Objets : Pointeurs de fonction, expressions lambda, expressions de liaison, objets de fonction
  • Rappels modèles : Tout type appelable (par exemple, expressions lambda, expressions de liaison, fonction objets)

Exemples :

  • Exemple de pointeur de fonction :

    void tranform_every_int(int * v, unsigned n, int (*fp)(int));
    int double_int(int x) { return 2*x; }
    int square_int(int x) { return x*x; }
    Copier après la connexion
  • std::function Objet Exemple :

    void stdf_tranform_every_int(int * v, unsigned n, std::function<int(int)> fp);
    int a[5] = {1, 2, 3, 4, 5};
    stdf_tranform_every_int(&amp;a[0], 5, Meow{8});
    Copier après la connexion
  • Exemple de rappel modèle :

    int nine_x_and_y (int x, int y) { return 9*x + y; }
    using std::placeholders::_1;
    stdf_transform_every_int_templ(&amp;a[0], 5, std::bind(nine_x_and_y, _1, 4));
    Copier après la connexion

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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal