带有模板类朋友的类模板:深入研究机制
想象一下用元素类(BE)构造一个二叉树(BT)类)描述每个节点,类似于以下结构:
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
这种区别源于模板阴影的概念。模板参数在嵌套模板范围内不能互相重复。因此,不同的参数名称对于嵌套模板是必不可少的。
考虑以下构造:
template<typename T> struct foo { template<typename U> friend class bar; };
这里,bar 被声明为 foo 的友元,无论它自己的模板参数如何。 bar 的所有变体,无论是 bar
相反,以下声明:
template<typename T> struct foo { friend class bar<T>; };
当 bar 的模板参数与 foo 对齐时,暗示 bar 只是 foo 的友元富的。仅条形
因此,在您的特定场景中,采用朋友类 bar
以上是为什么类模板内的好友模板类需要单独的参数?的详细内容。更多信息请关注PHP中文网其他相关文章!