我想复制有效的std::streambuf
实例之间的数据。也就是说,我想铲除它们之间的数据块,而不是逐字符复制。例如,这是不是我在寻找:流缓冲区之间的数据的块级复制
stringbuf in{ios_base::in};
stringbuf out{ios_base::out};
copy(istreambuf_iterator<char>{in},
istreambuf_iterator<char>{},
ostreambuf_iterator<char>{out});
存在着这种语法糖,有一点错误检查:
ostream os{&out};
os << ∈
这里是operator<<(basic_streambuf<..>*)
实施的一个片段在我的标准库(Mac OS X,XCode 7)中:
typedef istreambuf_iterator<_CharT, _Traits> _Ip;
typedef ostreambuf_iterator<_CharT, _Traits> _Op;
_Ip __i(__sb);
_Ip __eof;
_Op __o(*this);
size_t __c = 0;
for (; __i != __eof; ++__i, ++__o, ++__c)
{
*__o = *__i;
if (__o.failed())
break;
}
底线是:这仍然是每个字符复制。我希望标准库使用的算法依赖于流缓冲区的块级成员函数sputn
和sgetn
,而不是每个字符的传输。标准库是否提供了这样的算法,还是必须推出自己的算法?
的问题的输出是,这是基于与虚拟功能的接口上。你永远不知道什么时候'* __ o = * __ i''将无法输出,所以你不能提前阅读并且有可能失去这些角色。 –
你找到了方法吗? – barney