假设我有一个模板类,我试图将其声明为朋友类.我应该转发声明类还是给它自己的模板?
例:
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
原文地址:https://www.jb51.cc/c/110752.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。