我正在尝试创建一个istream
直接从原始内存缓冲区读取。
我在这里的另一篇文章中找到了一个很好的方法:
class membuf : public basic_streambuf<char>
{
public:
membuf(char* p, size_t n) {
setg(p, p, p + n);
}
};
然后我创建我的istream
使用这个membuf
:
membuf mb(dataPointer, dataLength);
istream reader(&mb);
然后我阅读使用getline()
and >>
运营商,一切都很美好。但是,我似乎无法使用seekg()
倒回到缓冲区的开头,并且istream::tellg()
总是返回-1
.
我是否需要编写更多代码才能使它们正常工作,或者这注定会失败?
函数tellg 和seekg 依赖于受保护的虚拟函数seekoff
and seekpos
,你必须在你的membuf
class.
默认值在basic_streambuf
刚刚返回pos_type(off_type(-1))
对于所有调用(对于许多实现来说可能等于 -1)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)