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

EdS*_*lle 5 c++ istream streambuf

我正在尝试创建一个istream直接从原始内存缓冲区读取的内容.

我在这里的另一篇文章中找到了一个很好的方法:

  class membuf : public basic_streambuf<char>
  {
  public:
      membuf(char* p, size_t n) {
          setg(p, p, p + n);
      }
  };
Run Code Online (Sandbox Code Playgroud)

然后我创建我istream使用这个membuf:

    membuf mb(dataPointer, dataLength);
    istream reader(&mb);
Run Code Online (Sandbox Code Playgroud)

然后我阅读使用getline()和>>运算符,一切都很棒.但是,我似乎无法seekg()回退到缓冲区的开头,并且istream::tellg()总是返回-1.

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

Bo *_*son 6

tellg和seekg函数依赖于受保护的虚函数,seekoff并且seekpos必须在membuf类中实现.

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

  • 我正在尝试这样做...在自定义 membuf 类上实现 `seekoff` 和 `seekpos`,除了我的代码中存在一个问题:`tellg` 未始终调用 `seekoff` 并且未调用 `seekpos`根本。任何建议或工作示例? (2认同)