template <typename T>
class First {
int a;
template<typename> friend class Second;
};
template <typename T>
class Second
{
int b;
template<typename> friend class First;
};
Это позволит каждому First<T>
получить доступ к внутренним частям каждого Second<U>
. Теперь, пока это техническое решение, вы можете подумать, является ли проект с циклическими зависимостями и открытием внутреннего для любого экземпляра другого класса лучшим решением для вашей конкретной проблемы.
Кстати, если вы хотите предоставить First<int>
доступ только к Second<int>
(а не Second<double>
), вы можете сделать это следующим образом:
template <typename> class Second;
template <typename T>
class First {
int a;
friend class Second<T>; // only befriend the same instantiation
};
template <typename T>
class Second {
int b;
friend class First<T>;
};
В этой второй версии вам требуется предварительное объявление шаблона Second
, прежде чем подружиться с конкретным экземпляром, но это позволяет вам предоставить доступ к внутренним элементам класса только конкретному экземпляру.