Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 包裹向量时tellg和seekg不工作<;char>;在地峡_C++_C++11_C++14 - Fatal编程技术网

C++ 包裹向量时tellg和seekg不工作<;char>;在地峡

C++ 包裹向量时tellg和seekg不工作<;char>;在地峡,c++,c++11,c++14,C++,C++11,C++14,正如这个链接所说: 我使用setg(vec.data(),vec.data(),vec.data()+vec.size());初始化streambuf。 之后,istream上的read()工作正常,但tellg()始终返回-1,并且seekg()始终失败 任何人都可以提供帮助?seekg和tellg通过pubseekoff和pubseekpos请求streambuf实际执行工作。这些功能的默认实现完全失败 您需要在streambuf中实现seekoff和seekpos。谢谢您的提问;我在引用相

正如这个链接所说:

我使用
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);
boost::iostreams::基本数组\源isrc(vec.data(),vec.size());
boost::iostreams::streamistr(isrc);

因为你不用自己编写实现就可以免费获得这个seek功能。

你的意思是覆盖
seekoff
seekpos
,对吗?我检查了stringstream的实现,它太复杂了。还有其他解决方案可以将向量包装到流中吗?谢谢
stringbuf
心理训练很难,因为你可以混合读和写。对于只读streambuf来说并不难。好的,我试着像stringstream那样实现,现在看来效果不错