C++ 當友元是類模板時

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 的T與QueueItem 的T爲相同類型
注意聲明類模板和聲明友元的不一樣,我開始就被這個給坑了
ast

相關文章
相關標籤/搜索