Лично единственные статические функции, которые я использую, - это заводские функции, например:
Все, что не требует частного доступа, становится бесплатной функцией.Все, что не является частью общедоступного интерфейса, по возможности не размещается в публичном месте (в соответствии с вашим новым подходом).
Минимальность и инкапсуляция
В Effective C ++ я высказался за полные и минимальные интерфейсы классов.Такие интерфейсы позволяют клиентам классов делать все, что они могут разумно делать, но классы содержат не больше функций-членов, чем это абсолютно необходимо.Я написал, что добавление функций сверх минимума, необходимого для того, чтобы клиенты могли выполнять свою работу, снижает понятность и удобство сопровождения класса, а также увеличивает время компиляции для клиентов.Джек Ривз писал, что добавление функций-членов сверх тех, которые действительно необходимы, нарушает принцип открытого / закрытого доступа, приводит к появлению интерфейсов толстых классов и в конечном итоге приводит к программному гниению.Это достаточное количество аргументов для минимизации числа функций-членов в классе, но теперь у нас есть дополнительная причина: отказ сделать это уменьшает инкапсуляцию класса.
Конечно, минимальный интерфейс класса не обязательнолучший интерфейс.В Effective C ++ я заметил, что добавление функций сверх тех, которые действительно необходимы, может быть оправданным, если оно значительно повышает производительность класса, облегчает использование класса или предотвращает возможные ошибки клиента.Основываясь на своей работе с различными струноподобными классами, Джек Ривз заметил, что некоторые функции просто «не чувствуют» себя правильно, когда становятся не-членами, даже если они могут быть не-друзьями-не-членами.«Лучший» интерфейс для класса может быть найден только путем уравновешивания многих конкурирующих задач, из которых степень инкапсуляции всего одна.
Тем не менее, урок этой статьи должен быть понятен.Несмотря на общепринятое мнение, использование функций, не являющихся членами, не являющимися членами, улучшает инкапсуляцию класса, а предпочтение таким функциям по сравнению с функциями-членами облегчает проектирование и разработку классов с полными и минимальными интерфейсами (или близкими к минимальным).Аргументы о естественности результирующего синтаксиса вызова, как правило, необоснованны, и принятие пристрастия к функциям, не являющимся членами, не являющимися членами, приводит к стратегиям упаковки для интерфейса класса, которые минимизируют зависимости компиляции клиента, в то же время максимизируя число удобных для них функций.
Пришло время отказаться от традиционных, но неточных представлений о том, что значит быть объектно-ориентированным.Вы настоящий сторонник инкапсуляции?Если да, то я знаю, что вы будете воспринимать функции, не являющиеся друзьями, не являющимися членами, с тем рвением, которого они заслуживают.