class template
std::basic_streambuf
namespace std {
template<class CharT, class Traits = char_traits<CharT>>
class basic_streambuf { …… };
using streambuf = basic_streambuf<char>;
using wstreambuf = basic_streambuf<wchar_t>;
}
概要
basic_streambuf
は、ストリームバッファを表現するクラスである。
入力ストリーム・出力ストリームに対して、実際の入出力機能を提供する。
テンプレートパラメータとして文字型を受け取るようになっており、使用を容易にするため、以下のパラメータ設定済みエイリアスが定義されている。
このエイリアスは<streambuf>
ヘッダと<iosfwd>
ヘッダで定義されている。
エイリアス |
説明 |
対応バージョン |
streambuf |
char 型。ASCII、UTF-8等のマルチバイト文字列や、バイナリデータとして使用する。 |
|
wstreambuf |
wchar_t 型。ワイド文字列として使用する。 |
|
ストリームバッファについて
basic_streambuf
はストリームバッファを取り扱うクラステンプレートである。
ストリームバッファは入力列と出力列からなる。
入力列と出力列それぞれについて、basic_streambuf
から直接アクセスできる部分は全体の一部分のみである(もちろん、全体がそこに収まっている場合もある)。
その直接アクセスできる部分列はCharT
の配列として表現され、先頭・現在位置・終端の3つのポインタで指し示す。
ただし、先頭・現在位置・終端のポインタがすべてnullptrである状態もありえる。
basic_streambuf
に対するすべての入出力処理は、この3つ組のポインタに対する処理や列全体と部分列の対応を変更する処理として実現されている。
たとえばbasic_filebuf
では、ファイルの内容を列全体と見なし、basic_filebuf内でバッファリングしている部分が先頭・現在位置・終端の3つのポインタで指し示されるという構成になる。
メンバ
- publicな関数: 主に
basic_streambuf
を利用する側に対するもの。
- protectedな関数:
basic_streambuf
の派生クラスを作る側に対するもの。
- protected virtualな関数:
basic_streambuf
の派生クラスを作る際に必要に応じてオーバーライドするもの。
型
名前 |
説明 |
対応バージョン |
char_type |
テンプレート仮引数CharT |
|
int_type |
Traits::int_type |
|
pos_type |
Traits::pos_type |
|
off_type |
Traits::off_type |
|
traits_type |
テンプレート仮引数Traits |
|
構築・破棄
名前 |
説明 |
対応バージョン |
(constructor) |
コンストラクタ (protected) |
|
(destructor) |
デストラクタ (virtual) |
|
operator= |
コピー代入 (protected) |
C++11 |
swap |
値の交換 (protected) |
C++11 |
ロケール
バッファとポジショニング
入力
名前 |
説明 |
対応バージョン |
in_avail |
現在の入力列の読み取り可能な文字数を返す。 |
|
snextc |
入力列の1文字を捨てて、次の文字を読み取る。 |
|
sbumpc |
入力列の現在位置の文字を読み取り、現在位置を1文字進める。 |
|
uflow |
入力部分列の領域を消費し切った際の処理 (protected virtual)。 |
|
sgetc |
入力列の現在位置の文字を読み取る。 |
|
underflow |
入力部分列の領域を消費し切った際の処理 (protected virtual)。 |
|
sgetn |
入力列から複数文字を読み取る。 |
|
xsgetn |
入力列から複数文字を読み取る (protected virtual)。 |
|
showmanyc |
ブロックせずに読み取れると期待される文字数を得る (protected virtual)。 |
|
入力の読み戻し
入力部分列の操作
名前 |
説明 |
対応バージョン |
eback |
入力部分列の先頭へのポインタを返す (protected)。 |
|
gptr |
入力部分列の現在位置へのポインタを返す (protected)。 |
|
egptr |
入力部分列の終端へのポインタを返す (protected)。 |
|
gbump |
入力部分列の現在位置を指定した量だけ進める (protected)。 |
|
setg |
入力部分列の各ポインタを設定する (protected)。 |
|
出力
名前 |
説明 |
対応バージョン |
sputc |
出力列に1文字書き込む。 |
|
overflow |
出力部分列の領域を消費し切った際の処理 (protected virtual)。 |
|
sputn |
出力列に複数文字を書き込む。 |
|
xsputn |
出力列に複数文字を書き込む (protected virtual)。 |
|
出力部分列の操作
名前 |
説明 |
対応バージョン |
pbase |
出力部分列の先頭へのポインタを返す (protected)。 |
|
pptr |
出力部分列の現在位置へのポインタを返す (protected)。 |
|
epptr |
出力部分列の終端へのポインタを返す (protected)。 |
|
pbump |
出力部分列の現在位置を指定した量だけ進める (protected)。 |
|
setp |
出力部分列の各ポインタを設定する (protected)。 |
|
参照