basic_iostreamなどの入出力ストリーム系のクラスにおいて、バッファはbasic_streambufが管理している。
setpで、バッファにおける書き込み開始位置と書き込み終了位置を指定すると、書き込みの度にbasic_streambufの中で、アクセス位置を変更してくれる。
std::basic_streambuf<CharT,Traits>::setp - cppreference.com
カスタムバッファ
こんな感じで、basic_streambufを継承したクラスで、コンストラクタでsetpで自前のchar型配列バッファbuf_の開始位置と終了位置をセットしておく。
$ vi basic_streambuf.cpp $ g++ basic_streambuf.cpp -o basic_streambuf $ ./basic_streambuf constructor buf_ = buf_ = ABC DEF GHI $
basic_ostreamのoscに文字列を出力すると、buf_にその文字列が入っているのが、print_bufでわかる。
Sample/cpp/basic_streambuf/setp/src/basic_streambuf at master · bg1bgst333/Sample · GitHub