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的T与QueueItem的T为相同类型
注意声明类模板和声明友元的不同,我开始就被这个给坑了

posted @ 2018-10-14 22:45  弱冠  阅读(131)  评论(0编辑  收藏  举报