在istream中包装vector <char>时,tellg和seekg无法正常工作

时间:2018-11-08 00:34:40

标签: c++ c++11 c++14

正如此链接[https://stackoverflow.com/a/8815308/1068715]所说:

我使用setg(vec.data(), vec.data(), vec.data() + vec.size());初始化streambuf。 之后,istream上的read()可以正常工作,但是tellg()总是返回-1,而seekg()总是失败。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

seekgtellg通过pubseekoffpubseekpos要求streambuf实际执行工作。这些功能的默认实现只会失败。

您需要在流缓冲中实现seekoffseekpos

答案 1 :(得分:0)

感谢您提出这个问题;在引用相同的链接后,我遇到了相同的问题。

我想补充一点,如果您遇到seekg()问题并担心实现此问题,我将为您提供Boost选项:

boost::iostreams::basic_array_source<char> isrc(vec.data(), vec.size());
boost::iostreams::stream< typeof(isrc) > istr(isrc);

因为您可以免费获得此搜索功能,而不必自己编写实现。