加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 模板朋友类:前瞻声明或……?

发布时间:2020-12-16 03:38:09 所属栏目:百科 来源:网络整理
导读:假设我有一个模板类,我试图将其声明为朋友类.我应该转发声明类还是给它自己的模板? 例: template typename Eclass SLinkedList;template typename Eclass SNode {private: E elem; SNodeE* next; friend class SLinkedListE;}; 要么 template typename Ecl
假设我有一个模板类,我试图将其声明为朋友类.我应该转发声明类还是给它自己的模板?

例:

template <typename E>
class SLinkedList;
template <typename E>
class SNode {
private:
  E elem;
  SNode<E>* next;
  friend class SLinkedList<E>;
};

要么

template <typename E>
class SNode {
private:
  E elem;
  SNode<E>* next;
  template <typename T>
  friend class SLinkedList;
};

解决方法

你的第一种方法可能就是你想要的.它将使SLinkedList< int> SNode< int>的朋友,所有匹配类型的类似.

您的第二种方法将使每个SLinkedList成为每个SNode的朋友.这可能不是你想要的SLinkedList< Widget>没有业务涉及SNode的私有部分< int>

我可以推荐的另一种方法是使SNode成为嵌套类.这对于由节点组成的数据结构非常常见:

template <typename E>
class SLinkedList {
    struct SNode {
        E elem;
        SNode* next;
    };
};

使用这个方案你也可以摆脱朋友声明并让SNode中的所有内容都是公开的,因为整个类都是私有的SLinkedList

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读