Скажімо, я створюю клас для двійкового дерева, 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 на шаблонах та друзях містить приклади різних типів взаємозв’язків з друзями для функцій, але не класів (і вгадування синтаксису ще не сходилось у рішенні). Я хотів би зрозуміти, як правильно визначити специфікації для типу стосунків з друзями, який я хочу визначити.