我正在重载我的istream运算符,所以我可以用我的对象替换 std::cin
. 我知道我必须为它提供一个空的字符串流,以便最终输出正常工作 .
我想将 std::ifstream
送入 std::stringstream
,如下所示:
while(ifs >> ss) {}
这可能吗?这是一个示例原型代码:
friend istream & operator >> (istream & is, Database & db)
{
ifstream ifs;
ifs.open(db.inputFilename_, ios::in | ios::binary);
if (!ifs.is_open())
{
cout << "Couldn't read " << db.inputFilename_ << endl;
return is;
}
while (ifs >> db.iss)
{}
ifs.close()
return db.iss;
}
我对以“使用Boost”开头的任何答案都不感兴趣:)这是一个纯粹的标准C项目 . 感谢您的任何帮助或指示 .
现在我得到:
error: invalid operands to binary expression ('ifstream' (aka 'basic_ifstream<char>') and 'istringstream' (aka 'basic_istringstream<char>'))
2 回答
只需这样做:
您可以将std::copy与std::istream_iterator用于
std::cin
,将std::ostream_iterator用于std::stringstream
.请注意,这会将整个文件复制到
std::stringstream
中,因此对于无法容纳在内存中的非常大的文件,这将失败 . NaCl给出的rdbuf
解决方案同样会对非常大的文件产生问题 .您可以通过不立即读取所有输入来解决大文件问题 . 但是,这很可能需要您在解析器中重构代码 . 如果没有更详细的实现,我不能指出你正确的方向 .