首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于模板的运算法重载。一个很小的有关问题

2014-01-03 
关于模板的运算法重载。一个很小的问题看如下代码:#include iostream#include sstream#include fstrea

关于模板的运算法重载。一个很小的问题
看如下代码:


#include <iostream>
#include <sstream>
#include <fstream>
#include <istream>
#include <ostream>
#include <string>
#include <vector>
#include <cstdlib>
using namespace std;
template <class Type>
class queue;

template <class Type>
class queueItem;


template <class Type>
istream& operator>>(istream &in,queue<Type> &q)
{
Type t;
in >> t;
q.push(t);
return in;
}

template <class Type>
class queueItem{
friend class queue<Type>;

friend istream &operator>> <Type>(istream &in,queue<Type>&);
queueItem(const Type &t):item(t),next(0){}
Type item;
queueItem *next;
};
template <class Type>
class queue{
public:


设置为友元函数的时候,为什么和它的定义有区别,为什么这里要给operator>>限定类型,而上面的定义却没有????万分感谢。
friend istream &operator>> <Type>(istream &in,const queue<Type>&);
queue():head(0),tail(0){}
queue(const queue &Q):head(0),tail(0){
copy_elems(Q);
}
queue &operator=(const queue&);

~queue(){
destroy();
}

Type &front();
const Type &front() const{
return head->item;
}
void push(const Type&);
void pop();
bool empty() const{
return head == 0;
}
void displayall();
private:
queueItem<Type> *head;
queueItem<Type> *tail;
void destroy();
void copy_elems(const queue&);
};
[解决办法]
设置为友元函数的时候,为什么和它的定义有区别,为什么这里要给operator>>限定类型,而上面的定义却没有????万分感谢。
------------------------------------------------------------
那个<type>不叫“限定类型”,而是operator>>的特化,因为友元要求是函数实体,但友元模板只是一个模板,不是函数实体,需要用<type>实例化一个特化,变成模板友元,才能使用friend。

热点排行