std::basic_stringbuf<CharT,Traits,Allocator>::overflow
protected: virtual int_type overflow ( int_type c = Traits::eof() ); |
||
文字 c を出力文字シーケンスに追加します。
c がファイル終端指示子 (traits::eq_int_type(c,traits::eof()) == true) の場合は、追加される文字はありません。 この関数は何もせず、 traits::eof() 以外の未規定の値を返します。
そうでなく、出力シーケンスに利用可能な書き込み位置があるか、この関数が利用可能な書き込み位置を作ることに成功した場合は、 sputc(c) を呼び、 c を返します。
stringbuf が出力用に開かれている (mode & ios_base::out) != 0) 場合、この関数は利用可能な書き込み位置を作ることができます。 この場合、現在のバッファ全体プラス少なくとももう1文字を保持するのに十分大きなバッファを再確保 (または初期確保) します。 stringbuf が入力用にも開かれている ((mode & ios_base::in) != 0) 場合、 overflow は新しい書き込み位置の次を指すように egptr() を移動することによって get 領域のサイズも増加させます。
引数
| c | - | put 領域に格納する文字 |
戻り値
失敗した場合は Traits::eof()、文字 c の追加に成功した場合は c、引数として Traits::eof() が渡された場合は Traits::eof() 以外の何らかの値。
ノート
std::basic_stringbuf の場合は、バッファと紐付けられているシーケンスはひとつであり同じであるため、この関数はバッファの内容を紐付けられている文字シーケンスに移動する一般的な overflow() とは異なります。
例
この例を実行するための使用した処理系では、 overflow() は put 領域を512バイトに過剰確保します。 str() の呼び出しはその初期化済みの4バイトのみを返しますが、次の 508 回の sputc() の呼び出しは新たな overflow() の呼び出しを要求しません。
#include <sstream>
#include <iostream>
struct mybuf : std::stringbuf
{
mybuf(const std::string& new_str,
std::ios_base::openmode which = std::ios_base::in|std::ios_base::out)
: std::stringbuf(new_str, which) {}
int_type overflow(int_type c = EOF) override
{
std::cout