能用函数模板来重载>>运算符吗?
有一个类模板
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++》系列书籍里讲了。