在 istream 中包装向量时,tellg 和 seekg 不起作用<char>



作为此链接[https://stackoverflow.com/a/8815308/1068715]说:

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

有人能帮忙吗?

seekgtellg通过pubseekoffpubseekpos请求streambuf实际执行工作。这些函数的默认实现就是失败。

您需要在streambuf中实现seekoffseekpos

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

我只想补充一点,如果你有一个seekg((问题,并且担心实现它,我会保证Boost选项:

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

因为您可以直接获得免费的seek功能,而不必自己编写实现。

最新更新