Скажімо, я створюю клас для двійкового дерева, BTі у мене є клас, який описує елемент дерева BE, щось на зразок
template<class T> class BE {
T *data;
BE *l, *r;
public:
...
template<class U> friend class BT;
};
template<class T> class BT {
BE<T> *root;
public:
...
private:
...
};
Здається, це працює; однак у мене є питання про те, що відбувається знизу.
Спочатку я намагався оголосити друга таким
template<class T> friend class BT;
однак видається необхідним використовувати U(або щось інше, ніж T) тут, чому це? Чи означає це, що якийсь особа BTє другом для якогось конкретного BEкласу?
Сторінка IBM на шаблонах та друзях містить приклади різних типів взаємозв’язків з друзями для функцій, але не класів (і вгадування синтаксису ще не сходилось у рішенні). Я хотів би зрозуміти, як правильно визначити специфікації для типу стосунків з друзями, який я хочу визначити.