#c
#c
Вопрос:
Предположим, у нас есть две структуры, bigguy и foryou.
Мы могли бы объявить их следующим образом:
struct bigguy
{
struct foryou
{
int survivors;
}cia, pavel;
};
или мы могли бы объявить их следующим образом:
struct foryou
{
int survivors;
};
struct bigguy
{
foryou cia;
foryou pavel;
};
Каковы преимущества и недостатки каждого типа объявления? Зависит ли это от цели программы? Считается ли один метод лучшей практикой, чем другой? (Предположим, что в гипотетической программе есть реальная причина не просто объявлять все как единую структуру.)
Комментарии:
1. «Зависит ли это от цели программы?» Конечно. Это просто способ организовать область видимости.
Ответ №1:
Вот некоторые преимущества вложенной структуры по сравнению с несколькими структурами:
- У вас есть возможность скрыть вложенную структуру в
private
разделе. Следовательно, остальной части вашего кода не нужно заботиться об этом. - Рефакторинг мог бы быть проще.
- Каждый производный класс
bigguy
, естественно, будет видетьforyou
, даже если они находятся в разных пространствах имен или областях. Это также интересно для вложенныхenum
, поскольку вы можете ссылаться на перечисленные константы, не добавляя к ним префикс в контексте пространства имен.
Вот некоторые преимущества нескольких структур перед вложенными структурами.
- Если вы хотите использовать
foryou
структуру внеbigguy
класса, вам нужно добавить к ней префикс,bigguy::
который иногда является сложным синтаксисом. Обратите внимание, чтоauto
интересно избегать таких объявлений. - у вас будут более понятные сообщения компилятора, если
bigguy
это шаблонный класс, и вы избежите некоторых примененийtypename
. На самом деле ifbigguy
является шаблонным классом и ifforyou
не нуждается в параметрах шаблона, предпочтительнее использовать несколько структур. Лучше, если вы можете получить свойbigguy
шаблонный класс из не шаблонного класса, который имеетforyou
inside .