Ключ в том, можно ли использовать Player
без использования Team
. Если это так, это должен быть отдельный класс, а не вложенный. В хорошо разработанном обычном (OO) программном обеспечении большинство вложенных классов используются исключительно внутри внешнего класса и являются частными. Или они - прокси, используемые для возвращаемых значений из функций внешнего класса, но никогда не объявляемые клиентами внешних классов.
Также может считаться целесообразным делать другие «представления» классов классов; например итераторы в контейнер. Являются ли итераторы членами или свободными классами, скорее проблема стиля, чем что-либо другое (но вы должны быть последовательными); это в основном влияет на имя (ContainerIterator
против Container::Iterator
).
Наконец, шаблоны вводят другое измерение: с учетом шаблона на тип T
, в этом шаблоне легко ссылаться на элементы, включая типы членов, T
; невозможно найти «несвязанные» типы.Другими словами, если вы создаете шаблон с помощью T == Container
, Container::Iterator
легко доступен как typename T:Iterator
, но у вас нет способа найти ContainerIterator
.
Учитывая имена ваших классов, я подозреваю очень сильно, что они должны быть независимыми, с Team
, имеющими отношение защиты 1-n
к Player
. (Я также подозреваю, что оба являются объектами-объектами и должны быть недоступными и непримиримыми. Но это еще одна проблема.)
Мне интересно, если 'struct player {int rating; имя строки; }; 'лучше выравнивается ... – SingerOfTheFall
@SingerOfTheFall Единственное различие заключается в том, где было добавлено дополнение. Существует аргумент для размещения меньших элементов 'struct' в конце, но он никогда не изменит ничего с менее чем тремя элементами и будет аргументировать исходный макет. И даже если это что-то изменит, разница обычно незначительна и может быть проигнорирована. –
@James, thanks, that bugging me for a long time: P – SingerOfTheFall