我想複製有效的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