Аргумент Скотта Мейера о том, что функции, не являющиеся членами, увеличивают инкапсуляцию и обеспечивают более элегантный дизайн (с точки зрения дизайна), кажется мне очень верным. См. здесь: Статья
А вот с этим у меня проблемы. (И, похоже, другие тоже, особенно разработчики библиотек, которые обычно полностью игнорируют это)
Код обычно выглядит лучше и логичнее, когда я использую функции-члены. Это может быть приобретенным вкусом, и просто нужно привыкнуть сначала смотреть на алгоритмы, а затем на объекты. (вздрагивает)
Так что, возможно, у меня есть только одна проблема:
С функциями-членами я И моя IDE знают, что может делать класс.
Для меня это огромно! Я не использую для программирования ничего, что не поддерживает завершение кода функции-члена. В хорошо спроектированных библиотеках он полностью заменяет мне документацию. И даже если бы я посмотрел документацию API, просмотр списка участников кажется абсолютно естественным, логичным, и я могу быть уверен, что это конец. Если метода там нет, я могу с уверенностью предположить, что его не существует, и я могу написать свой не-член, не являющийся другом.
Я смирился с этим в STL, потому что имеет смысл рассматривать алгоритмы отдельно от основных компонентов и из-за фактора к этому привыкаешь.
Я не видел IDE, которая могла бы сказать мне, какие функции, не являющиеся членами, работают с конкретным классом.
И это на самом деле мой вопрос: существует ли IDE (или функция IDE), которая помогает с этим соглашением о коде?