A quoi servent les pointeurs de fonctions et comment les utiliser?
Je comprends que je peux utiliser des pointeurs de fonctions.
Quelqu'un peut m'expliquer pourquoi les utiliser, et comment? Petit exemple de code serait très utile pour moi.
source d'informationauteur zlack
Vous devez vous connecter pour publier un commentaire.
Un cas simple, c'est comme ceci: Vous avez un tableau des opérations (fonctions) selon une logique d'entreprise. Vous disposez d'une fonction de hachage qui réduit un problème de saisie de l'un de l'entreprise des fonctions de logic. Un code propre aurait un tableau de pointeurs de fonction, et votre programme va en déduire un indice de ce tableau à partir de l'entrée et de l'appeler.
Voici un exemple de code:
Mais bien sûr, des rappels sont l'utilisation la plus courante. Exemple de code ci-dessous:
Un très commun de cas d'utilisation est une fonction de rappel. Par exemple, si vous chargez quelque chose à partir d'une base que vous pouvez mettre en œuvre votre fonction de chargement de sorte que les rapports sur les progrès vers une fonction de rappel. Cela peut être fait avec des pointeurs de fonction.
Rappels. Je fais un appel asynchrone à un morceau de code et il veut laissez-moi savoir quand il se termine, je peux envoyer un pointeur de fonction à appeler une fois que c'est fait.
Je suis surpris que personne n'a mentionné "les machines d'état". Pointeurs de fonction sont un moyen très courant de mettre en œuvre des machines d'état pour des tâches telles que l'analyse. Voir par exemple: lien.
Vous utilisez un pointeur de fonction lorsque vous avez besoin de donner une méthode de rappel. L'un des exemple classique est d'enregistrer les gestionnaires de signaux - la fonction qui sera appelée lorsque votre programme est SIGTERM (Ctrl-C)
Voici un autre exemple:
Vous pouvez en apprendre plus à propos des pointeurs de fonction ici http://www.newty.de/fpt/index.html
Si vous êtes plus familier avec les langages orientés objet, vous pouvez penser que C est la façon de mettre en œuvre les stratégie de modèle de conception.
Nous allons faire un
map
-comme la fonction de C.De cette façon, nous pouvons transformer une fonction qui travaille sur des entiers de travailler sur des tableaux de nombres entiers. Nous pourrions également faire une version similaire:
Cela fait la même chose, mais permet à notre fonction pour savoir quel élément, c'est sur. On peut l'utiliser, par exemple:
Que le code d'impression:
Pour notre énumération exemple:
Cette affiche:
Comme un monde plus réel exemple, une chaîne de la bibliothèque pourrait avoir une fonction qui applique une fonction qui fonctionne sur les caractères unique pour tous les caractères dans la chaîne. Un exemple de telles fonctions sont la norme-bibliothèque
toupper()
ettolower()
fonctions dansctype.h
- nous pourrions utiliser cestring_apply()
d'une fonction pour faire unstring_toupper()
fonction facilement.Un très bon et facile à comprendre tutoriel:
http://www.newty.de/fpt/index.html
Espère que cette aide.
Une autre utilisation pour les pointeurs est une itération de listes ou de tableaux.
Pour le code, découvrez qrdl réponse à les machines d'état tutoriels.
J'ai utilisé une variante de la méthode à mettre en œuvre un menu pour un écran LCD que j'ai sur un conseil d'administration. Très très utile, rend le codage beaucoup plus propre et plus facile à lire. À l'aide de pointeurs de fonction permet d'étendre le nombre, les noms et l'ordre des menus très facile, et cache tous les détails de l'échelon supérieur, l'appel de la fonction qui voit juste " hey, j'ai écrit à l'écran LCD.