繁体   English   中英

模板朋友类:前瞻声明或......?

[英]Template Friend Class: Forward Declaration or…?

假设我有一个模板类,我试图将其声明为朋友类。 我应该转发声明类还是给它自己的模板?

例:

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所有SNode都是公开的,因为整个类都是私有的SLinkedList

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM