bad*_*lms 6 c++ templates friend-class
假设我有一个模板类,我试图将其声明为朋友类.我应该转发声明类还是给它自己的模板?
例:
template <typename E>
class SLinkedList;
template <typename E>
class SNode {
private:
E elem;
SNode<E>* next;
friend class SLinkedList<E>;
};
Run Code Online (Sandbox Code Playgroud)
要么
template <typename E>
class SNode {
private:
E elem;
SNode<E>* next;
template <typename T>
friend class SLinkedList;
};
Run Code Online (Sandbox Code Playgroud)
Rya*_*ing 10
你的第一种方法可能就是你想要的.它将成为所有匹配类型SLinkedList<int>的朋友SNode<int>,并且类似.
你的第二种方法将成为每个人的每SLinkedList一个朋友SNode.这可能不是你想要的,因为SLinkedList<Widget>没有业务涉及私人部分SNode<int>
我可以推荐的另一种方法是创建SNode一个嵌套类.这对于由节点组成的数据结构非常常见:
template <typename E>
class SLinkedList {
struct SNode {
E elem;
SNode* next;
};
};
Run Code Online (Sandbox Code Playgroud)
通过这个方案,您可以摆脱朋友声明并将所有内容SNode公之于众,因为整个课程都是私有的SLinkedList