«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как определить дружеские отношения в классах шаблонов с разными аргументами шаблона?

Как определить дружеские отношения в классах шаблонов с разными аргументами шаблона?

Опубликовано 18 ноября 2024 г.
Просматривать:809

How to Define Friend Relationships in Template Classes with Different Template Arguments?

Углубление шаблонов классов с друзьями классов шаблонов

При определении класса двоичного дерева (BT) и класса его элементов (BE) необходимо установить дружеские отношения, чтобы BT мог получить доступ к частным участникам BE. Однако очень важно понимать основную механику, чтобы правильно определить отношения.

Изначально вы пытались объявить дружеские отношения как шаблон дружественный класс BT. Но этот синтаксис приводит к конфликту имен с параметром шаблона BE. Параметры шаблона во вложенных шаблонах должны иметь разные имена.

Вместо этого следует использовать разные имена параметров шаблона, например:

template class BE {
  template friend class BT;
};

Это объявление указывает, что любой класс BT, независимо от его аргументов шаблона, является другом всех классов BE с соответствующими аргументами шаблона.

Рассмотрите следующие примеры для дальнейшего пояснения различных типов. дружеских отношений:

template
struct foo {
  template
  friend class bar;
};

В этом случае bar является другом foo независимо от аргументов шаблона bar. Любая специализация bar будет дружественной любой специализации foo.

template
struct foo {
  friend class bar;
};

Здесь bar является другом foo только в том случае, если его аргумент шаблона соответствует аргументу foo. Таким образом, только bar будет другом foo.

В вашем конкретном сценарии дружественный класс bar; должно быть достаточно, поскольку он позволяет любой специализации bar получать доступ к закрытым членам BE, если его аргумент шаблона соответствует соответствующему классу BE.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3