C++ 当友元是类模板时
C++
当友元是类模板时
现在有这样一个类模板
//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
};
存在另一个类模板,需要访问上面的类模板的私有域
//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类为友元
但两个类不在同一文件中
所以必须先声明Queue类模板;
//QueueItem.hpp
template <class T> class Queue;
同时也必须声明Queue类为友元
template <class T>
class QueueItem
{
friend class Queue<T>;
//...同上
};
这里Queue
注意声明类模板和声明友元的不同,我开始就被这个给坑了