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