Господа, меня вот какой "архитектурный" вопрос волнует..
Предположим есть несколько объектов (не имеющие наследственной связи), которые должны как-то общаться между собой (например иметь ссылки друг на друга, или просто доступ к чужим данным, не суть важно).
Очевидно что в этом случае мы можем пойти как минимум 2мя путями:
1) Объявить некий публичный интерфейс к нужным данным.
2) Объявить некий приватный интерфейс и тупо начать френдить.
Оба варианта как по мне тухлые:
1 - создаёт опасность того, что этим интерфейсом воспользуется тот, кто им воспользоваться не должен.
2 - создаёт прям-таки железобетонные связи между классами, которые потом проблематично отслеживать и модерировать.
Ну и френды считаются мувитоном и признаком хреновой архитектуры, насколько я понимаю.
Собственно существует ли какая-то хитрость до которой я не догоняю, или проблема на самом деле надуманна?
Я с таким в основном встречался когда два класса жестко связаны. Например контейнер и итератор. В таких случаях я обычно объявляю итератор внутри контейнера, а контейнер использует только публичный интерфейс итератора.