basic_stringbuf クラス
文字の特徴がクラス Tr
によって決まる型 Elem
の要素の、配列オブジェクトに格納されている要素のシーケンスとの間での転送を制御するストリーム バッファーについて説明します。
構文
template <class Elem, class Tr = char_traits<Elem>,
class Alloc = allocator<Elem>>
class basic_stringbuf : public basic_streambuf<Elem, Tr>
パラメーター
Alloc
アロケーター クラス。
Elem
文字列の基本要素の型。
Tr
文字列の基本要素に特化した文字の特徴。
解説
シーケンスでの変更に応じて、オブジェクトの割り当て、拡張、解放が行われます。
クラス basic_stringbuf<Elem
, Tr
, Alloc
> のオブジェクトは、コンストラクターの引数 ios_base::
openmode のコピーをその stringbuf
モード mode として格納します。
mode & ios_base::in
が 0 でない場合は、入力バッファーにアクセスできます。 詳細については、「basic_streambuf クラス」を参照してください。mode & ios_base::out
が 0 でない場合は、出力バッファーにアクセスできます。
コンストラクター
コンストラクター | 説明 |
---|---|
basic_stringbuf | basic_stringbuf 型のオブジェクトを構築します。 |
Typedefs
型名 | 説明 |
---|---|
allocator_type | この型はテンプレート パラメーター Alloc の同意語です。 |
char_type | 型名を Elem テンプレート パラメーターに関連付けます。 |
int_type | basic_filebuf のスコープ内のこの型を、Tr スコープ内の同じ名前の型と同等にします。 |
off_type | basic_filebuf のスコープ内のこの型を、Tr スコープ内の同じ名前の型と同等にします。 |
pos_type | basic_filebuf のスコープ内のこの型を、Tr スコープ内の同じ名前の型と同等にします。 |
traits_type | 型名を Tr テンプレート パラメーターに関連付けます。 |
メンバー関数
メンバー関数 | 説明 |
---|---|
overflow | いっぱいのバッファーに新しい文字が挿入されたときに呼び出すことができる、プロテクト仮想関数。 |
pbackfail | プロテクト仮想メンバー関数が要素を入力バッファーに戻そうと試み、その要素を現在の要素に (次のポインターによって指されるように) します。 |
seekoff | プロテクト仮想メンバー関数が、制御されているストリームの現在の位置を変更しようと試みます。 |
seekpos | プロテクト仮想メンバー関数が、制御されているストリームの現在の位置を変更しようと試みます。 |
str | 文字列バッファー内のテキストを設定または取得します。書き込み位置は変更しません。 |
スワップ | |
underflow | 入力ストリームから現在の要素を抽出するプロテクト仮想メンバー関数。 |
要件
ヘッダー:<sstream>
名前空間: std
basic_stringbuf::allocator_type
この型はテンプレート パラメーター Alloc の同意語です。
typedef Alloc allocator_type;
basic_stringbuf::basic_stringbuf
basic_stringbuf
型のオブジェクトを構築します。
basic_stringbuf(
ios_base::openmode _Mode = ios_base::in | ios_base::out);
basic_stringbuf(
const basic_string<Elem, Tr, Alloc>& str,
ios_base::openmode _Mode = ios_base::in | ios_base::out);
パラメーター
_Mode
ios_base::openmode の列挙値のうちの 1 つ。
str
basic_string 型のオブジェクト。
解説
最初のコンストラクターは、入力バッファーと出力バッファーを制御するすべてのポインターに Null ポインターを格納します。 詳細については、basic_streambuf クラスの「コメント」セクションを参照してください。 _Mode も stringbuf モードとして格納します。 詳細については、basic_stringbuf クラスの「コメント」セクションを参照してください。
2 番目のコンストラクターは、文字列オブジェクト str によって制御されるシーケンスのコピーを割り当てます。 _Mode & ios_base::in
が 0 以外の場合、シーケンスの先頭から読み取りを開始するように入力バッファーを設定します。 _Mode & ios_base::out
が 0 以外の場合、シーケンスの先頭から書き込みを開始するように出力バッファーを設定します。 _Mode も stringbuf モードとして格納します。 詳細については、basic_stringbuf クラスの「コメント」セクションを参照してください。
basic_stringbuf::char_type
型名を Elem テンプレート パラメーターに関連付けます。
typedef Elem char_type;
basic_stringbuf::int_type
basic_filebuf のスコープ内のこの型を、Tr
スコープ内の同じ名前の型と同等にします。
typedef typename traits_type::int_type int_type;
basic_stringbuf::off_type
basic_filebuf のスコープ内のこの型を、Tr
スコープ内の同じ名前の型と同等にします。
typedef typename traits_type::off_type off_type;
basic_stringbuf::overflow
いっぱいのバッファーに新しい文字が挿入されたときに呼び出すことができる、プロテクト仮想関数。
virtual int_type overflow(int_type _Meta = traits_type::eof());
パラメーター
_Meta
バッファーに挿入する文字または traits_type::eof
。
戻り値
関数が失敗すると、traits_type::eof
を返します。 それ以外の場合は、traits_type::not_eof(_ Meta) を返します。
解説
_Metaが traits_type::eof と等しくない場合、保護された仮想メンバー関数は、要素 traits_type::to_char_type(_Meta) を出力バッファーに挿入しようとします。 これはさまざまな方法で行うことができます。
書き込み位置が使用可能な場合は、書き込み位置に要素を格納し、出力バッファーの次のポインターをインクリメントできます。
新しい記憶域または追加の記憶域を出力バッファーに割り当てることで、書き込み位置を使用可能にすることができます。 このように出力バッファーを拡張すると、関連付けられているすべての入力バッファーも拡張されます。
basic_stringbuf::p backfail
プロテクト仮想メンバー関数が要素を入力バッファーに戻そうと試み、その要素を現在の要素に (次のポインターによって指されるように) します。
virtual int_type pbackfail(int_type _Meta = traits_type::eof());
パラメーター
_Meta
バッファーに挿入する文字または traits_type::eof
。
戻り値
関数が失敗すると、traits_type::eof
を返します。 それ以外の場合は、traits_type::not_eof(_ Meta) を返します。
解説
_Meta が traits_type::eof と等しい場合、プッシュ バックする要素は、実質的に、現在の要素の前に既にストリームにある要素になります。 それ以外の場合、その要素が byte = traits_type::to_char_type(_ Meta) で置き換えられます。 この関数は、さまざまな方法で要素を戻すことができます。
戻り位置が使用可能であり、格納されている要素が byte に等しい場合、入力バッファーのネクスト ポインターをデクリメントできます。
戻り位置が使用可能で、stringbuf モードでシーケンスの変更が許可されている (mode & ios_base::out が 0 以外) 場合は、この関数は byte を戻り位置に格納し、入力バッファーのネクスト ポインターをデクリメントできます。
basic_stringbuf::p os_type
basic_filebuf のスコープ内のこの型を、Tr
スコープ内の同じ名前の型と同等にします。
typedef typename traits_type::pos_type pos_type;
basic_stringbuf::seekoff
プロテクト仮想メンバー関数が、制御されているストリームの現在の位置を変更しようと試みます。
virtual pos_type seekoff(
off_type _Off,
ios_base::seekdir _Way,
ios_base::openmode _Mode = ios_base::in | ios_base::out);
パラメーター
_Off
シークする _Way の相対位置。 詳細については、「basic_stringbuf::off_type」を参照してください。
_Way
オフセット演算の開始位置。 有効値については、「ios_base::seekdir」を参照してください。
_Mode
ポインター位置のモードを指定します。 既定では、読み取り位置および書き込み位置を変更できます。 詳細については、「ios_base::openmode」を参照してください。
戻り値
新しい位置または無効なストリーム位置を返します。
解説
クラス basic_stringbuf<Elem, Tr, Alloc>
のオブジェクトの場合、ストリームの位置はストリーム オフセットのみで構成されます。 オフセット ゼロは、被制御シーケンスの最初の要素を指定します。
新しい位置は、次のように決定されます。
_Way
==ios_base::beg
の場合、新しい位置はストリームの先頭プラス _Off です。_Way
==ios_base::cur
の場合、新しい位置は現在のストリームの位置プラス _Off です。_Way
==ios_base::end
の場合、新しい位置はストリームの最後プラス _Off です。
_Mode & ios_base::in
が 0 以外の場合、関数は入力バッファー内の次に読み取る位置を変更します。 _Mode & ios_base::out
が 0 以外の場合、関数は出力バッファー内の次に書き込む位置を変更します。 影響を受けるストリームの場合、そのバッファーが存在する必要があります。 配置操作を正常に完了するためには、結果のストリームの位置が被制御シーケンス内になければなりません。 関数が両方のストリームの位置に影響する場合、_Way は必ず ios_base::beg
または ios_base::end
になり、両方のストリームは同じ要素に配置されます。 それ以外の場合 (またはどちらも位置も影響を受けない場合)、配置操作は失敗します。
関数がいずれかまたは両方のストリームの位置の変更に成功すると、結果のストリームの位置が返されます。 それ以外の場合は、失敗し、無効なストリームの位置が返されます。
basic_stringbuf::seekpos
プロテクト仮想メンバー関数が、制御されているストリームの現在の位置を変更しようと試みます。
virtual pos_type seekpos(pos_type _Sp, ios_base::openmode _Mode = ios_base::in | ios_base::out);
パラメーター
_Sp
シークする位置。
_Mode
ポインター位置のモードを指定します。 既定では、読み取り位置および書き込み位置を変更できます。
戻り値
関数がいずれかまたは両方のストリームの位置の変更に成功すると、結果のストリームの位置が返されます。 それ以外の場合は、失敗し、無効なストリームの位置が返されます。 ストリームの位置が無効であることを確認するには、戻り値と pos_type(off_type(-1))
を比較します。
解説
クラス basic_stringbuf<Elem, Tr, Alloc
> のオブジェクトの場合、ストリームの位置はストリーム オフセットのみで構成されます。 オフセット ゼロは、被制御シーケンスの最初の要素を指定します。 新しい位置は、_ Sp によって判断されます。
mode & ios_base::in が 0 以外の場合、関数は入力バッファー内の次に読み取る位置を変更します。 mode & ios_base::out が 0 以外の場合、関数は出力バッファー内の次に書き込む位置を変更します。 影響を受けるストリームの場合、そのバッファーが存在する必要があります。 配置操作を正常に完了するためには、結果のストリームの位置が被制御シーケンス内になければなりません。 それ以外の場合 (またはどちらも位置も影響を受けない場合)、配置操作は失敗します。
basic_stringbuf::str
文字列バッファー内のテキストを設定または取得します。書き込み位置は変更しません。
basic_string<Elem, Tr, Alloc> str() const;
void str(
const basic_string<Elem, Tr, Alloc>& _Newstr);
パラメーター
_Newstr
新しい文字列。
戻り値
被制御シーケンスが*this
によって制御されるシーケンスのコピーであるクラス basic_string<Elem、Tr、Alloc >、のオブジェクトを返します。
解説
最初のメンバー関数は、被制御シーケンスが*this
によって制御されるシーケンスのコピーであるクラス basic_string<Elem、Tr、Alloc
> のオブジェクトを返します。 コピーされるシーケンスは、stored stringbuf モードによって異なります。
mode & ios_base::out が 0 以外で、出力バッファーが存在する場合、シーケンスは全体の出力バッファー (
pbase
で始まる epptr - pbase 要素) になります。mode & ios_base::in が 0 以外で、入力バッファーが存在する場合、シーケンスは全体の入力バッファー (
eback
で始まる egptr - eback 要素) になります。それ以外の場合、コピーされたシーケンスは空になります。
2 番目のメンバー関数は、現在 *this
によって制御されているシーケンスの割り当てを解除します。 その後、_Newstr によって制御されるシーケンスのコピーを割り当てます。 mode & ios_base::in が 0 以外の場合、シーケンスの先頭から読み取りを開始するように入力バッファーを設定します。 mode & ios_base::out が 0 以外の場合、シーケンスの先頭から書き込みを開始するように出力バッファーを設定します。
例
// basic_stringbuf_str.cpp
// compile with: /EHsc
#include <iostream>
#include <sstream>
using namespace std;
int main( )
{
basic_string<char> i( "test" );
stringstream ss;
ss.rdbuf( )->str( i );
cout << ss.str( ) << endl;
ss << "z";
cout << ss.str( ) << endl;
ss.rdbuf( )->str( "be" );
cout << ss.str( ) << endl;
}
test
zest
be
basic_stringbuf::traits_type
型名を Tr テンプレート パラメーターに関連付けます。
typedef Tr traits_type;
解説
この型は、テンプレート パラメーター Tr のシノニムです。
basic_stringbuf::underflow
入力ストリームから現在の要素を抽出するプロテクト仮想関数。
virtual int_type underflow();
戻り値
関数が成功しない場合は、 traits_type::eof を返します。 それ以外の場合は、変換される入力ストリーム内の現在の要素を返します。
解説
プロテクト仮想メンバー関数は、現在の要素 byte
を入力バッファーから抽出しようとし、現在のストリームの位置を進め、traits_type::to_int_type( byte) として要素を返します。 これは 1 つの方法で実行可能です。読み取り位置が使用可能な場合は、読み取り位置に格納されている要素として byte
を使用し、入力バッファーの次のポインターを進めます。
basic_streambuf::swap
この文字列バッファーと別の文字列バッファーの内容を交換します。
void basic_stringbuf<T>::swap(basic_stringbuf& other)
パラメーター
other
この basic_stringbuf により内容が交換される basic_stringbuf 。
解説
basic_stringbuf::operator=
演算子の右側にある basic_stringbuf の内容を、左側の basic_stringbuf に割り当てます。
basic_stringbuf& basic_stringbuf:: operator=(const basic_stringbuf& other)
パラメーター
other
内容が演算子の左側にある stringbuf に割り当てられる、ロケールの特徴を含む basic_stringbuf。