[英]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.