0

如何将新的 char 数组设置为 fstream 的 filebuf 的缓冲区,filebuf 中有一个函数(setbuf),但它受到保护。在网上搜索时,一些网站提到 fstream::setbuf 但它似乎不再存在。

谢谢

4

2 回答 2

1

streambuf 被设计为使用模板方法模式进行定制,其中公共方法不是虚拟的,子类通过实现非公共虚拟方法来定制行为。

在本例中,调用 setbuf 的公共方法名为 pubsetbuf。

但是请注意,basic_filebuf 的 setbuf 实现是相当松散的:唯一的保证是 setbuf(0, 0) 使流无缓冲。在其他情况下,效果是实现定义的。

于 2010-05-03T12:50:21.160 回答
0

受保护的成员函数的意义在于它被派生的子类覆盖。这是 libstdc++ 手册的一小部分,它准确地讨论了.

这是一段摘录,<streambuf>它在代码中表达了同样的观点:

  // [27.5.2.4.2] buffer management and positioning
  /**
   *  @brief  Manipulates the buffer.
   *
   *  Each derived class provides its own appropriate behavior.  See
   *  the next-to-last paragraph of 
   *  http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt11ch25s02.html
   *  for more on this function.
   *
   *  @note  Base class version does nothing, returns @c this.
  */
  virtual basic_streambuf<char_type,_Traits>* 
  setbuf(char_type*, streamsize)
  { return this; }
于 2010-05-03T12:13:47.590 回答