如何将新的 char 数组设置为 fstream 的 filebuf 的缓冲区,filebuf 中有一个函数(setbuf),但它受到保护。在网上搜索时,一些网站提到 fstream::setbuf 但它似乎不再存在。
谢谢
streambuf 被设计为使用模板方法模式进行定制,其中公共方法不是虚拟的,子类通过实现非公共虚拟方法来定制行为。
在本例中,调用 setbuf 的公共方法名为 pubsetbuf。
但是请注意,basic_filebuf 的 setbuf 实现是相当松散的:唯一的保证是 setbuf(0, 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; }