fstream の filebuf のバッファに新しい char 配列を設定するにはどうすればよいですか。filebuf には関数 (setbuf) がありますが、保護されています。Web で検索すると、fstream::setbuf に言及しているサイトもありますが、もう存在しないようです。
ありがとう
streambuf は、パブリック メソッドが仮想ではないテンプレート メソッド パターンを使用してカスタマイズできるように設計されており、サブクラスは非パブリック仮想メソッドを実装して動作をカスタマイズします。
この例では、setbuf を呼び出す public メソッドの名前は 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; }