ifstream和ofstream中的filebuf

时间:2010-05-03 10:53:51

标签: c++ stream fstream

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

由于

2 个答案:

答案 0 :(得分:1)

streambuf旨在使用模板方法模式进行自定义,其中公共方法不是虚拟方法,子类通过实现非公共虚拟方法来自定义行为。

在本案例中,调用setbuf的public方法名为pubsetbuf。

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

答案 1 :(得分:0)

受保护的成员函数的意思是它被派生的子类覆盖。以下是libstdc ++手册的一小部分discusses exactly that

以下是<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; }