如何将新的char数组设置为fstream的filebuf的缓冲区,filebuf中有一个函数(setbuf),但它受到保护。在网上搜索时,有些网站提到了fstream :: setbuf,但它似乎不再存在了。
由于
答案 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; }