Со временем я понял, как устроены многие маленькие функции, и мне это действительно очень нравится, но мне трудно избавиться от робости, чтобы применить это к классам, особенно к тем, в которых больше, чем горстка непубличных переменных-членов.
Каждая дополнительная вспомогательная функция загромождает интерфейс, поскольку часто код специфичен для класса, и я не могу просто использовать какой-то общий кусок кода. (По крайней мере, по моим ограниченным знаниям, я все еще новичок, не знаю всех существующих библиотек и т.д.)
Поэтому в крайних случаях я обычно создаю класс-помощник, который становится другом класса, с которым нужно работать, так что у него есть доступ ко всем непубличным внутренностям.
Альтернативой являются свободные функции, которым нужны параметры, но даже если преждевременная оптимизация - зло, и я на самом деле не профилировал и не дизассемблировал ее... Я все еще прихожу в ужас от одной мысли о передаче всего того, что мне иногда нужно, даже просто в виде ссылки, хотя это должен быть простой адрес на аргумент.
Является ли все это вопросом предпочтений, или есть широко используемый способ работы с подобными вещами?
Я знаю, что попытка принудительно загнать вещи в шаблоны является своего рода антишаблоном, но меня волнует обмен кодом и стандарты, и я хочу получить материал, по крайней мере, довольно не болезненный для других людей для чтения.
Итак, как вы, ребята, справляетесь с этим?
Редактировать: Некоторые примеры, которые побудили меня задать этот вопрос:
О свободных функциях: DeadMG был озадачен тем, как заставить свободные функции работать... без аргументов.
Моя проблема с этими функциями в том, что в отличие от функций-членов, свободные функции знают о данных, только если вы им их передадите, если только не используются глобальные переменные и тому подобное.
Иногда, однако, у меня есть огромная, сложная процедура, которую я хочу разбить на части для удобства чтения и понимания, но в ней так много различных переменных, которые используются повсюду, что передача всех данных свободным функциям, которые не имеют отношения к каждой частице данных-членов, выглядит просто кошмарно. Нажмите для примера
Это фрагмент функции, преобразующей данные в формат, который принимает мой класс mesh. Потребовались бы все эти параметры, чтобы рефакторить это, например, в функцию "finalizeMesh". На данный момент это часть огромной компьютерной функции данных mesh, и биты информации об измерениях, размерах и масштабировании используются повсюду, переплетаясь.
Вот что я имею в виду, говоря "свободным функциям иногда нужно слишком много параметров".
Я думаю, это говорит о плохом стиле, и не обязательно является симптомом нерациональности как таковой, я надеюсь :P.
Я постараюсь прояснить ситуацию по ходу дела, если потребуется.