У меня есть класс класса Node - это знакомый с классом BinaryTree, который содержит элемент типа Node. Я хочу сделать BinareTree любого типа, поэтому я использую шаблоны для обоих классов. Как и в этом коде:Шаблоны классов и друзья Классы
template <class T>
class Node
{
T value;
Node<T> *left, *right;
friend template <typename T> class BinaryTree; // here is the problem
};
template <class Y>
class BinaryTree{...};
Что синтаксис мне нужно вам в декларации друга класса BinaryTree, если я буду использовать его в качестве шаблона? Моя цель состоит в том, чтобы иметь возможность написать:
BinareTree<int> tree;
Есть ли лучший способ это, что я подумал? Спасибо!
Помните, первый вопрос, который нужно задать при использовании 'friend': вы действительно уверены, что вам нужно использовать' friend'? – Kupiakos
@ Kupiakos Обратите внимание, что есть [способы рефакторинга отношения друзей] (http://stackoverflow.com/questions/27492132/how-can-i-remove-refactor-a-friend-dependency-declaration-properly) , иногда это имеет смысл (например, ради прагматизма), просто использовать «друга», если вы хорошо знаете, что делаете. –
@Kupiakos Да, мне нужно, потому что я хочу иметь доступ к частным членам класса Node в классе BinaryTree. – Copacel