0
我正在嘗試使用流來從現有數據的向量中讀取數據。seekg在使用自定義流緩衝區時使用istream不起作用
// http://stackoverflow.com/questions/8815164/c-wrapping-vectorchar-with-istream
template<typename CharT, typename TraitsT = std::char_traits<CharT> >
class vectorwrapbuf : public std::basic_streambuf<CharT, TraitsT>
{
public:
vectorwrapbuf(std::vector<CharT> &vec)
{
this->setg(&vec[0], &vec[0], &vec[0] + vec.size());
}
};
int main()
{
vector<char> data(100, 1);
vectorwrapbuf<char> databuf(data);
std::istream file(&databuf);
file.exceptions(std::istream::failbit | std::istream::badbit);
file.seekg(10); // throws
}
然而,當我把它seekg
(如果不使用異常正常或報告錯誤)拋出異常。爲什麼是這樣? 10在輸入數據的100個字符之內。代碼需要與C++ 11和編譯器一起工作。
活生生的例子:根據http://en.cppreference.com/w/cpp/io/basic_streambuf/pubseekpos
istream::seekg()
爲了威脅的錯誤條件 http://ideone.com/PfpW0o
好的謝謝。你能建議我怎麼做,或者它不簡單? –
@NeilKirk看起來像需要驗證輸入,用適當的位置調用'setg()'並返回第一個參數。 – Slava