7

我正在尝试创建一个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.

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

4

1 回答 1

7

函数tellg 和 seekg 取决于受保护的虚函数seekoffseekpos,你必须在你的membuf类中实现。

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

于 2011-07-20T14:53:51.687 回答