我正在尝试创建一个直接从原始内存缓冲区读取的 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
。
我是否需要编写更多代码才能使它们正常工作,还是这注定要失败?
最佳答案
函数 tellg 和 seekg 依赖于 protected 虚函数 seekoff
和 seekpos
,您必须在 membuf
类中实现它们。
basic_streambuf
中的默认值只是为所有调用返回 pos_type(off_type(-1))
(对于许多实现可能等于 -1)。
关于c++ - istream::tellg() 在与我的自定义 streambuf 类一起使用时返回 -1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6763646/