正如此链接[https://stackoverflow.com/a/8815308/1068715]所说:
我使用setg(vec.data(), vec.data(), vec.data() + vec.size());
初始化streambuf。
之后,istream上的read()
可以正常工作,但是tellg()
总是返回-1,而seekg()
总是失败。
有人可以帮忙吗?
答案 0 :(得分:1)
seekg
和tellg
通过pubseekoff
和pubseekpos
要求streambuf实际执行工作。这些功能的默认实现只会失败。
您需要在流缓冲中实现seekoff
和seekpos
。
答案 1 :(得分:0)
感谢您提出这个问题;在引用相同的链接后,我遇到了相同的问题。
我想补充一点,如果您遇到seekg()问题并担心实现此问题,我将为您提供Boost选项:
boost::iostreams::basic_array_source<char> isrc(vec.data(), vec.size());
boost::iostreams::stream< typeof(isrc) > istr(isrc);
因为您可以免费获得此搜索功能,而不必自己编写实现。