Разница между вложенной структурой / классами и объявлением экземпляров классов внутри класса

Предположим, у нас есть две структуры, bigguy и foryou.

Мы могли бы объявить их так:

struct bigguy
{
struct foryou
{
int survivors;
}cia, pavel;
};

или мы могли бы объявить их так:

struct foryou
{
int survivors;
};

struct bigguy
{
foryou cia;
foryou pavel;
};

Каковы преимущества и недостатки каждого типа декларации? Зависит ли это от цели программы? Один метод считается лучшей практикой, чем другой? (Предположим, что в гипотетической программе есть реальная причина не просто объявлять все как единую структуру.)

0

Решение

Вот некоторые преимущества вложенной структуры над несколькими структурами:

  • У вас есть возможность скрыть вложенную структуру в private раздел. Следовательно, остальная часть вашего кода не должна заботиться об этом.
  • Рефакторинг может быть проще.
  • Каждый производный класс bigguy естественно увидим foryou даже если они находятся в разных пространствах имен или областей. Это также интересно для вложенных enum так как вы можете ссылаться на перечисленные константы без добавления префикса к контексту пространства имен.

Вот некоторые преимущества нескольких структур над вложенными структурами.

  • Если вы хотите использовать foryou структурировать вне bigguy класс, вы должны префикс его bigguy:: который иногда является тяжелым синтаксисом. Обратите внимание, что auto Интересно избегать таких деклараций.
  • у вас будут более понятные сообщения компилятора, если bigguy является шаблоном класса, и вы избежите использования typename, На самом деле, если bigguy это шаблон класса, и если foryou не требует параметров шаблона, несколько структур предпочтительнее. Лучше вы можете получить свой bigguy шаблонный класс из не шаблонного класса, который имеет foryou внутри.
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector