当我的自定义streambuf类使用时,istream :: tellg()返回-1?

时间:2011-07-20 14:37:45

标签: c++ istream streambuf

我正在尝试创建一个直接从原始内存缓冲区读取的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()>>运算符阅读,一切都很棒。但是,我似乎无法使用seekg()来回退到缓冲区的开头,istream::tellg()始终返回-1

我是否需要编写更多代码才能使这些代码发挥作用,或者这注定要失败?

1 个答案:

答案 0 :(得分:6)

函数tellg和seekg取决于您必须在seekoff类中实现的受保护虚拟函数seekposmembuf

basic_streambuf中的默认值只返回pos_type(off_type(-1))所有调用(对于许多实现,它可能等于-1)。

相关问题