与我的自定义 Streambuf 类一起使用时,istream::tellg() 返回 -1?

发布于 2024-11-25 19:41:07 字数 622 浏览 0 评论 0原文

我正在尝试创建一个直接从原始内存缓冲区读取的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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦明 2024-12-02 19:41:07

函数tellg 和seekg 依赖于受保护的虚拟函数seekoffseekpos,您必须在membuf 类中实现它们。

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

The functions tellg and seekg depends on protected virtual functions seekoff and seekpos, that you would have to implement in your membuf class.

The defaults in basic_streambuf just returns pos_type(off_type(-1)) for all calls (which might be equal to -1 for many implementaions).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文