Bonjour à tous.
Je m'intéresse à l'opposition qu'il existe entre les fonctions statiques d'une classe et les fonctions libres.
Pourquoi choisir plutôt l'un que l'autre ? Certains cas sont évidents (operator<< par exemple) mais la grande majorité ne le sont pas
et je cherches des arguments qui peuvent les départager.
En réfléchissant et en fouillant sur le net, j'en arrive aux points suivants
1) Les fonctions statiques ont de facilités pour partager des arguments. Dès lors, dès que plusieurs services sont offerts par des fonctions et qu'un contexte est partagé par les dites fonctions, alors celles ci devraient être statique à une classe.
2) Les types sont les paramètres des classes templates et les classes avec des fonctions statiques jouent un grand rôle dans ce domaine de la programmation
3) Les fonctions libres offrent une meilleurs réutilisabilité (exemple avec <algorithms>) et permettent dans une certaines mesure une meilleure abstraction (template <class T> void foo(T& v){ //what you whant qui utilise v.begin()} n'est pas toujours valide alors que begin(v) l'est, que v soit un std::vector ou tableau C-like)
Je ne pense pas avoir fait le tour de la question et c'est pourquoi je sollicite vos avis.
Merci.
David Côme.
Partager