Quand utiliser la fonction de rappel ?

怪我咯
Libérer: 2023-03-10 19:46:02
original
2155 Les gens l'ont consulté

En bref, c'est une fonction qui est appelée. Si vous passez un pointeur de fonction (adresse) en paramètre à une autre fonction, et lorsque ce pointeur est utilisé pour appeler la fonction vers laquelle il pointe, on dit que c'est
.
Pourquoi l'utiliser ?
Parce que l'appelant et l'appelé peuvent être séparés. L'appelant ne se soucie pas de savoir qui est l'appelé, tout ce qu'il a besoin de savoir, c'est qu'il existe une fonction appelée avec un certain prototype et certaines restrictions (telles qu'une valeur de retour int).
Si vous voulez savoir ce que fait la fonction de rappel en pratique, supposons d'abord qu'il existe une situation dans laquelle nous voulons écrire une bibliothèque qui fournit certaines implémentations de
, telles que
, tri rapide, tri shell, tri par shake, etc., mais afin de rendre la bibliothèque plus polyvalente, je ne souhaite pas intégrer de logique de tri dans la fonction et laisser les utilisateurs implémenter la logique correspondante ou, je veux le ; bibliothèque à utiliser pour une variété de
( int, float, string), que devons-nous faire à ce moment-là ? Vous pouvez utiliser
et effectuer des rappels.
Les rappels peuvent être utilisés pour les mécanismes de notification. Par exemple, parfois une minuterie doit être définie dans le programme. Chaque fois qu'un certain moment arrive, le programme recevra une notification correspondante, mais l'implémenteur du mécanisme de notification n'en sait rien. notre programme. À ce stade, nous devons disposer d'un prototype spécifique
et utiliser ce pointeur pour effectuer un rappel afin d'informer notre programme que l' événement s'est produit. En fait, l'API SetTimer() utilise une fonction de rappel pour avertir le minuteur et, si aucune fonction de rappel n'est fournie, elle enverra également un message au
du programme.
Un autre
qui utilise le mécanisme de rappel est EnumWindow(), qui énumère toutes les fenêtres de niveau supérieur à l'écran, appelle une fonction fournie par le programme pour chaque fenêtre et transmet le gestionnaire de fenêtre. Si l'appelé renvoie une valeur, continuez l'itération, sinon quittez. EnumWindow() ne se soucie pas de l'endroit où se trouve l'appelé ni de ce que l'appelé a fait avec le gestionnaire qu'il a transmis, il ne se soucie que de la valeur de retour car, en fonction de la valeur de retour, il poursuivra l'exécution ou quittera.
Dans tous les cas, la fonction de rappel est héritée du langage C Par conséquent, en C++, les rappels ne doivent être utilisés que lors de l'établissement d'une interface avec du code C ou lors de la gestion d'une fonction d'interface de rappel existante. Sauf dans les cas ci-dessus, les méthodes virtuelles ou les foncteurs doivent être utilisés en C++ au lieu des fonctions de rappel.

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!

Étiquettes associées:
source:php.cn
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