La question Où devrais-je placer des fonctions qui ne sont pas liées à une classe a suscité un débat quant à savoir s'il est logique en C ++ de combiner des fonctions utilitaires dans une classe ou de simplement les faire exister en tant que fonctions libres dans un espace de noms.
Je viens d’un fond C # où cette dernière option n’existe pas et qui tend donc naturellement à utiliser des classes statiques dans le petit code C ++ que j’écris. La réponse la plus votée sur cette question ainsi que plusieurs commentaires indiquent toutefois que les fonctions libres doivent être préférées, suggérant même que les classes statiques étaient un anti-modèle. Pourquoi est-ce le cas en C ++? Au moins à la surface, les méthodes statiques sur une classe semblent impossible à distinguer des fonctions libres dans un espace de noms. Pourquoi donc la préférence pour ce dernier?
Les choses seraient-elles différentes si la collection de fonctions utilitaires nécessitait des données partagées, par exemple un cache que l'on pourrait stocker dans un champ statique privé?