重载>>操作符的问题

C++语言 码拜 9年前 (2015-10-08) 906次浏览

代码如下:

#include <iostream>
#include <algorithm>
#include <vector>
#include <list>
#include <string>
#include <string.h>
#include <iomanip>
using namespace std;

namespace test
{
	template<typename T>
	istream & operator >> ( istream & in, T & ContainerT )
	{
		while( in )
		{
			typename T::value_type val;
			std::operator >> ( in, val );
			if ( in )
			{
				ContainerT.push_back( val );
			}
		}
		return in;
	}
}

int main( )
{
	//这样编译不报错
	list<string> list_str;
	test::operator >> ( cin, list_str );
	//这样写就编译报错了
	list<int> list_int;
	test::operator >> ( cin, list_int );

	return 0;
}

求教要怎么改写代码,才能让我重载的>>操作符对任何容器类型都能用呢

方案推荐指数:20
std::operator >> ( in, val );
改成
    using std::operator>>;
            in >> val ;
方案推荐指数:20

我也研究了半天, 到现在才弄明白: 
对于内置类型的来说, operator>> 函数是istream类的成员.
对于类类型来说, 由于不能修改istream类, 所以只能定义全局operator>>函数.
所以, 对于内置类型来说, 调用全局的就不匹配.
对于类类型来说, 调用istream的成员函数也不匹配.
唯一相同的就是通过运算符的方法调用.


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明重载>>操作符的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)