假设我正在创建一个二叉树的类,名称为
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关于模板和友元的页面提供了不同类型函数的友元关系示例,但没有提供类的示例(并且猜测语法还没有收敛于解决方案)。我更希望了解如何正确地获取我想定义的友元关系类型的规范。
friend class BT
对于友元行抛出错误error: 'BT' 不是一个模板
尽管它稍后被声明为:template class BT {
...
}
- Michael Conlentemplate<typename T> class BT;
的前向声明,然后在BE类内部使用friend class BT<T>;
。请注意,不要改变原来的意思。 - Bartosz Milewski