Предположим, у нас есть две структуры, bigguy и foryou.
Мы могли бы объявить их так:
struct bigguy
{
struct foryou
{
int survivors;
}cia, pavel;
};
или мы могли бы объявить их так:
struct foryou
{
int survivors;
};
struct bigguy
{
foryou cia;
foryou pavel;
};
Каковы преимущества и недостатки каждого типа декларации? Зависит ли это от цели программы? Один метод считается лучшей практикой, чем другой? (Предположим, что в гипотетической программе есть реальная причина не просто объявлять все как единую структуру.)
Вот некоторые преимущества вложенной структуры над несколькими структурами:
private
раздел. Следовательно, остальная часть вашего кода не должна заботиться об этом.bigguy
естественно увидим foryou
даже если они находятся в разных пространствах имен или областей. Это также интересно для вложенных enum
так как вы можете ссылаться на перечисленные константы без добавления префикса к контексту пространства имен.Вот некоторые преимущества нескольких структур над вложенными структурами.
foryou
структурировать вне bigguy
класс, вы должны префикс его bigguy::
который иногда является тяжелым синтаксисом. Обратите внимание, что auto
Интересно избегать таких деклараций.bigguy
является шаблоном класса, и вы избежите использования typename
, На самом деле, если bigguy
это шаблон класса, и если foryou
не требует параметров шаблона, несколько структур предпочтительнее. Лучше вы можете получить свой bigguy
шаблонный класс из не шаблонного класса, который имеет foryou
внутри. Других решений пока нет …