首页 > 后端开发 > C++ > 正文

为什么类模板内的好友模板类需要单独的参数?

Barbara Streisand
发布: 2024-11-17 18:40:02
原创
228 人浏览过

Why Do I Need a Separate Parameter for a Friend Template Class Inside a Class Template?

带有模板类朋友的类模板:深入研究机制

想象一下用元素类(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朋友级BT;失败,需要使用单独的参数 U(或任何非 T 参数)。

这种区别源于模板阴影的概念。模板参数在嵌套模板范围内不能互相重复。因此,不同的参数名称对于嵌套模板是必不可少的。

考虑以下构造:

template<typename T>
struct foo {
  template<typename U>
  friend class bar;
};
登录后复制

这里,bar 被声明为 foo 的友元,无论它自己的模板参数如何。 bar 的所有变体,无论是 bar、bar、bar 还是其他,都成为 foo 的任何实例的友元。

相反,以下声明:

template<typename T>
struct foo {
  friend class bar<T>;
};
登录后复制

当 bar 的模板参数与 foo 对齐时,暗示 bar 只是 foo 的友元富的。仅条形会被认为是 foo 的朋友。

因此,在您的特定场景中,采用朋友类 bar; 的形式;应该能够有效地在BE和BT之间建立理想的朋友关系。

以上是为什么类模板内的好友模板类需要单独的参数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板