Il faut passer en argument une fonction qui a le bon type. Le type de la fonction est donné à la compilation pour que le compilateur puisse tout vérifier. Dans le prototype de la fonction, il est indiqué le type des arguments (par exemple, le type fonction, acceptant un entier et renvoyant un entier).En effet si on peut passer n'importe quoi comme nom de fonction ca peut vite devenir le cirque.
Et les fonctions d'ordre supérieur (fonction prenant une autre fonction en argument) sont extrêmement utiles, bien que largement sous-utilisées en C++ (du fait de la syntaxe trop lourde, entre autres). Par exemple, une fonction de tri peut accepter une fonction de comparaison en argument. C'est aussi une technique élégante pour factoriser du code.
Pourquoi ?Dans ce cas ce n'est plus du pur objet.
Pour moi, le pur objet, c'est quand tout est objet. Des types de base (int, char...) aux types plus complexes. Ruby et F# implémentent correctement le paradigme fonctionnel (fonctions de premier ordre, etc. même si Ruby n'encourage pas forcément la philosophie fonctionnelle). Qu'as-tu à reprocher à leur modèle objet ? Dans ces deux langages, on peut ajouter des méthodes au type int, etc.
Si tu n'es pas d'accord, quelle définition utilises-tu ?
Pour les 5%, pas envie de troller là-dessus. J'ai juste donné une vague estimation, mais ça dépend de beaucoup de choses.
Partager