读书人

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

发布时间: 2012-03-05 11:54:02 作者: rapoo

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

读书人网 >C++

热点推荐