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

  • 相关阅读:
    时间差的计算
    时间差的计算第二篇
    并不能完全不编码完成Windows Service的安装和卸载
    今年是搜索引擎年吗?热!搜索引擎算法点击率火爆
    Virtual PC,我真的不敢用你!
    我理解的17种C#写的Hello World程序
    反搜索引擎
    如何保证Windows Serverice健壮长效运转?
    服务器是怎么做成的?
    超酷的超级DataGrid
  • 原文地址:https://www.cnblogs.com/kwebi/p/9788552.html
Copyright © 2020-2023  润新知