与我的自定义 Streambuf 类一起使用时,istream::tellg() 返回 -1?
我正在尝试创建一个直接从原始内存缓冲区读取的istream
。
我在这里的另一篇文章中找到了一个很好的方法:
class membuf : public basic_streambuf<char>
{
public:
membuf(char* p, size_t n) {
setg(p, p, p + n);
}
};
然后我使用这个 membuf
创建我的 istream
:
membuf mb(dataPointer, dataLength);
istream reader(&mb);
然后我使用 getline()
阅读> 和 >>
运算符,一切都很棒。但是,我似乎无法使用 seekg()
回退到缓冲区的开头,并且 istream::tellg()
始终返回 -1
。
我是否需要编写更多代码才能使它们正常工作,或者这注定会失败?
I'm trying to create an istream
that reads directly from a raw memory buffer.
I found a nice way to do this in another post on here:
class membuf : public basic_streambuf<char>
{
public:
membuf(char* p, size_t n) {
setg(p, p, p + n);
}
};
Then I create my istream
using this membuf
:
membuf mb(dataPointer, dataLength);
istream reader(&mb);
I then read using getline()
and >>
operators, and everything is wonderful. However, I can't seem to use seekg()
to rewind back to the beginning of my buffer, and istream::tellg()
always returns -1
.
Do I need to write some more code to get these to work, or is this doomed to failure?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
函数tellg 和seekg 依赖于受保护的虚拟函数
seekoff
和seekpos
,您必须在membuf
类中实现它们。basic_streambuf 中的默认值只为所有调用返回 pos_type(off_type(-1)) (对于许多实现来说可能等于 -1)。
The functions tellg and seekg depends on protected virtual functions
seekoff
andseekpos
, that you would have to implement in yourmembuf
class.The defaults in
basic_streambuf
just returnspos_type(off_type(-1))
for all calls (which might be equal to -1 for many implementaions).