Вопрос « Куда мне помещать функции, не связанные с классом », вызвал некоторые споры о том, имеет ли смысл в C ++ объединять служебные функции в классе или они просто существуют как свободные функции в пространстве имен.
Я пришел из C # фона, где последний вариант не существует, и, таким образом, естественным образом склоняется к использованию статических классов в небольшом коде C ++, который я пишу. Ответ на этот вопрос, получивший наибольшее количество голосов, а также несколько комментариев, однако, говорят, что предпочтение отдается свободным функциям, даже если предположить, что статические классы были анти-паттерном. Почему это так в C ++? По крайней мере, на первый взгляд статические методы класса кажутся неотличимыми от свободных функций в пространстве имен. Почему при этом предпочтение отдается последнему?
Изменится ли ситуация, если для набора служебных функций потребуются некоторые общие данные, например, кэш, который можно хранить в частном статическом поле?