2010-06-16 5 views
0

En quoi ce pointeur de fonction est-il meilleur que if-else ou switch case? Est-ce parce que le pointeur de fonction aide les fonctions de rappel et favorise ainsi la mise en œuvre asynchrone?Pointeur de fonction

+1

Vous voudrez peut-être mentionner la langue que vous consultez. – griegs

+0

Pourquoi, quelle différence ferait la connaissance du langage? –

+2

Mieux dans quel contexte? Ce n'est pas mieux pour écrire des conditions ou des commutateurs ... – Stephen

Répondre

2

Il est préférable que les fonctions ne soient pas connues au préalable. Comment concevez-vous la bibliothèque standard C qsort() sans utiliser de pointeur de fonction?

+0

"si les fonctions ne sont pas connues auparavant" c'est un point clé. Je voulais juste le souligner. – givanse

2

Ce n'est pas "mieux", c'est différent. Oui, le but principal du pointeur de fonction est de fournir une fonctionnalité de rappel. Non, ce n'est pas directement lié à l'asynchronisme.

Vérifiez this article pour plus d'informations sur les pointeurs de fonction.

1

pointeurs de fonction donnent lieu à une meilleure conception de votre code . Considérez quand vous avez une option d'appeler une fonction parmi cinquante fonctions. Quelle serait la taille de l'interrupteur? Cependant, vous pouvez facilement mapper tous les pointeurs de fonction selon leur id, et appeler la fonction appropriée de la carte en utilisant le "id". Le code serait facilement maintenu et semble soigné.

Il existe d'autres avantages et possibilités d'utilisation du pointeur de fonction. Pour une bonne explication, regardez le tutoriel here

+0

En outre, vous avez des garanties de complexité en utilisant une carte que vous n'auriez pas dans un boîtier de commutation. Le compilateur peut ne pas toujours être capable de construire une table de saut, dans le cas où la recherche de la bonne fonction à appeler serait séquentielle. Dans une carte, la recherche serait un O (log N) très rapide, avec un arbre binaire, ou O (1) dans une carte de hachage. – lvella