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

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

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

Why Does a Templated Class Need to Declare a Friend Templated Class with a Different Template Parameter?

Шаблонный класс с другом Шаблонный класс: расшифровка механики

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

Вложенные шаблоны и теневое копирование

Первоначально вы пытаетесь объявить шаблон друга как шаблон класс друзей. БТ;. Однако это запрещено, поскольку параметры вложенных шаблонов не могут иметь одинаковые имена. Вложенные шаблоны должны использовать отдельные имена параметров шаблона.

Определение дружественных отношений

Когда вы объявляете дружественный класс BT; template, вы устанавливаете дружественные отношения между BT и BE, независимо от шаблонные аргументы BT. Это означает, что любой экземпляр BT может получить доступ к частным членам любого экземпляра BE.

Если вы хотите ограничить дружеские отношения только теми экземплярами BT, которые используют тот же аргумент шаблона, что и BE, вы должны объявить друг следующим образом:

template friend class bar;

В вашем конкретном случае объявление класса друга bar; внутри класса BE должно быть достаточно.

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

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

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

Copyright© 2022 湘ICP备2022001581号-3