Как Вы имеете дело с ними? У меня есть некоторые классы (обычно классы, которые содержат статистику и т.д.) приблизительно с 20 + переменные участники, и списки инициализации заканчиваются очень долго, расширяясь вне страницы width, если я вручную не повторяюсь. Вы пытаетесь сломать такие классы или заключить Вас сделка с этим некоторым другим способом?
Это не выглядит очень опрятным, но иногда я пишу переменные в списке друг на друге как так:
myConstructor(var1, var2, var3, ..., varN) :
member1(var1),
member2(var2),
member3(var3),
...
memberN(varN)
выходят за пределы ширины страницы
Ну, во-первых, вам, вероятно, следует выбрать ширину страницы и придерживаться ее. Если хотите, используйте автоматический перенос строк из вашего редактора. Чтение кода, размер которого превышает размер вашего окна, действительно сложно, особенно для ваших коллег, использующих vi или emacs с терминалов. Выберите ширину страницы и придерживайтесь ее - это означает перенос этих списков инициализаторов на несколько (возможно, много) строк.
Вы пытаетесь разбить такие классы?
20 - это много параметров, вероятно, он заслуживает того, чтобы его разбили. «Классы-боги» обычно представляют собой запах кода и указывают на необходимость рефакторинга.
Это не означает автоматически, что вы должны разбивать вещи, всегда есть исключения из правил. Но, безусловно, рассматривайте это как вариант.
Когда вы объявляете их в заголовочном файле, вы (или можете ли вы) группируете их с комментариями? Например: // Следующие несколько параметров относятся к файлу IO
и // Следующие параметры относятся к виджету
, который предоставит вам хороший шаблон для того, какие объекты выглядят отвлеченный.
В целом действительно большие классы указывают на множество сложных состояний, а сложные состояния имеют тенденцию вызывать ошибки. Вы должны, как и в случае с функциями, предпочитать, чтобы они были небольшими и сфокусированными.
{Ваш пример кода}
Я считаю, что он вполне читабелен и «аккуратен», хотя, вероятно, это будет довольно длинный список. Как я уже упоминал, для борьбы с этим я бы подумал о разделении его на более мелкие классы.
списки инициализации оказываются очень длинными, выходя за пределы ширины страницы, если я не оборачиваю вручную
Один из способов - провести рефакторинг: например, вместо передачи 4 примитивных переменных («верх», «влево», «ширина» и «высота») просто передайте одну составную переменную («прямоугольник»).
В качестве альтернативы, просто для макета исходного кода:
class Foo
{
int m_a;
int m_b;
int m_c;
public:
Foo(
int a,
int b,
int c
)
: m_a(a)
, m_b(b)
, m_c(c)
{
}
};
Любой класс с двадцатью аргументами конструктора, вероятно, потребует рефакторинга.Я бы подумал об использовании композиции , разбивая большие классы на более мелкие, независимые части. Подумайте, какие из ваших аргументов конструктора тесно связаны, и сгруппируйте эти переменные в отдельный класс. Затем вы можете передать экземпляр вашего нового класса любым классам, которым нужен доступ к данным.