как связать два шаблонных класса в дружбе "многие ко многим"?
-
27-10-2019 - |
Вопрос
предположим, что у меня есть следующие два класса шаблонов:
родовое словокак связать их дружбой "многие ко многим".например, добавление метода в First, который печатает b объекта параметра Second.
ясен ли мой вопрос?
Решение
Это позволит каждому сгенерированному кодовому тегу получить доступ к внутренним компонентам каждого сгенерированного кода кода.Теперь, когда это техническое решение, вы можете подумать, является ли проект с циклическими зависимостями и открытием внутреннего для любого экземпляра другого класса лучшим решением вашей конкретной проблемы.
Кстати, если вы хотите предоставить доступ к First<T>
только к Second<U>
(а не к First<int>
), вы можете сделать это следующим образом:
В этой второй версии вам необходимо предварительное объявление шаблона Second<int>
перед тем, как подружиться с конкретным экземпляром, но это позволяет вам предоставить доступ к внутренним компонентам класса только конкретному экземпляру.
Другие советы
Если вы понимаете, что такое защита, проблема в предварительном объявлении шаблонов:
родовое словоВы можете начать с объявления каждого класса:
родовое словоИ теперь оба класса будут знать о другом в своих определениях.При необходимости вы можете объявить их там друзьями.
родовое словои то же в обратном порядке.
Вы также можете реализовать тела функций в определениях классов, если им нужно видеть детали друг друга, т.е. они не могут использовать копию "прямого объявления".