C++
当友元是类模板时如今有这样一个类模板this
//QueueItem.hpp template <class T> class QueueItem { private: QueueItem(const T &t) : item(t), next(0) {} T item; // value stored in this element QueueItem *next; // pointer to next element in the Queue };
存在另外一个类模板,须要访问上面的类模板的私有域code
//Queue.hpp template <class T> class Queue { public: Queue() : head(0), tail(0) {} //名字 Queue 是 Queue<Type> 缩写表示 Queue(const Queue &q) : head(0), tail(0) { copy_elems(q); } Queue &operator=(const Queue &); // copy control to manage pointers to QueueItems in the Queue virtual ~Queue() { destroy(); } Type &front() { return head->item; } // return element from head of Queue const Type &front() const { return head->item; } void push(const Type &); // add element to back of Queue void pop(); // remove element from head of Queue bool empty() const { // true if no elements in the Queue return head == 0; } private: QueueItem<Type> *head; // pointer to first element QueueItem<Type> *tail; // pointer to last element void destroy(); // delete all the elements void copy_elems(const Queue &); // copy elements from parameter }
要访问QueueItem类私有域就必须声明Queue类为友元
但两个类不在同一文件中element
因此必须先声明Queue类模板;rem
//QueueItem.hpp template <class T> class Queue;
同时也必须声明Queue类为友元it
template <class T> class QueueItem { friend class Queue<T>; //...同上 };
这里Queue
注意声明类模板和声明友元的不一样,我开始就被这个给坑了