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

能用函数模板来重载>>运算符吗?解决方案

2012-03-05 
能用函数模板来重载运算符吗?有一个类模板templatetypenameTclasssqlist{...类的成员...friendistream

能用函数模板来重载>>运算符吗?
有一个类模板
template   <typename   T>
class   sqlist{
          ...类的成员...
          friend   istream&   operator> > (   istream   &,   sqlist <T>   &   );
}

template   <typename   T>
istream&   operator> > (   istream   &,   sqlist <T>   &   )
{
          ...函数的代码...
}

编译不能通过。查教材也没看到用函数模板来重载> > 运算符的情况。有什么参考书提到这种情况吗?是否还有其他问题?有什么好的办法来解决?

[解决办法]
可以啊
将函数代码放到声明的地方
template <typename T>
class sqlist{
...类的成员...
friend istream& operator> > ( istream &, sqlist <T> & )
{
...函数的代码...
}
}

[解决办法]
//第一种方法:
template <typename T>
class sqlist{
T a;
friend istream& operator> > ( istream & in, sqlist <T> & s){
in> > s.a;
return in;
}
};

//第二种方法:
template <typename T>
class sqlist{
T a;
template <typename U>
friend istream& operator> > ( istream & in, sqlist <U> & s);
};

template <typename U>
istream& operator> > ( istream & in, sqlist <U> & s )
{
in> > s.a;
return in;
}
[解决办法]
这个是herb sutter在他的《Exceptional C++》系列书籍里讲了。

热点排行