basic_stringbuf 類別
描述資料流緩衝區,其控制類型 Elem
的項目 (其字元特性由類別 Tr
所決定),與陣列物件中儲存的項目序列之間的往來傳輸。
語法
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<Tr
Elem
,>Alloc
會將openmode自變數的ios_base::
複本從其建構函式儲存為stringbuf
模式模式:
如果
mode & ios_base::in
非零,輸入緩衝區即可存取。 如需詳細資訊,請參閱 basic_streambuf 類別。如果
mode & ios_base::out
非零,輸出緩衝區即可存取。
建構函式
建構函式 | 描述 |
---|---|
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 | 設定或取得字串緩衝區中的文字,而不需要變更寫入位置。 |
swap | |
underflow | 用於從輸入資料流擷取目前項目之受保護的虛擬成員函式。 |
需求
Header:<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);
參數
_模式
ios_base::openmode 中的其中一個列舉。
str
basic_string 類型的物件。
備註
第一個建構函式會在控制輸入緩衝區和輸出緩衝區的所有指標中儲存一個 null 指標。 如需詳細資訊,請參閱 basic_streambuf 類別的<備註>一節。 它也會將 _Mode 儲存為 stringbuf 模式。 如需詳細資訊,請參閱 basic_stringbuf 類別的<備註>一節。
第二個建構函式會配置由字串物件 str 所控制之序列的複本。 如果 _Mode & ios_base::in
為非零值,它會設定輸入緩衝區從序列開頭開始讀取。 如果 _Mode & ios_base::out
為非零值,它會設定輸出緩衝區從序列開頭開始寫入。 它也會將 _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());
參數
_元
要插入緩衝區的字元,或 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());
參數
_元
要插入緩衝區的字元,或 traits_type::eof
。
傳回值
如果函式無法成功,則會傳 traits_type::eof
回 。 否則會傳回 traits_type::not_eof(_ Meta)。
備註
如果_Meta比較等於 traits_type::eof,則要回推的項目實際上是目前元素之前已在數據流中的元素。 否則會以 byte = traits_type::to_char_type(_ Meta) 取代該元素。 此函式可以透過下列各種方式來放回元素:
如果有 putback 位置可供使用,而且儲存在其中的元素與位元組比較的結果相等,則可以遞減輸入緩衝區的下一個指標。
如果有 putback 位置可供使用,而且 stringbuf 模式允許改變序列 (mode & ios_base::out 為非零值),則可以將位元組儲存在 putback 位置,並遞減輸入緩衝區的下一個指標。
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。
_道路
位移作業的起點。 如需可能的值,請參閱 ios_base::seekdir。
_模式
指定指標位置的模式。 預設為允許您修改讀取和寫入位置。 如需詳細資訊,請參閱 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
為非零值,此函式會改變要讀入輸入緩衝區的下一個位置。 如果 _Mode & ios_base::out
為非零值,此函式會改變要寫入輸出緩衝區的下一個位置。 若要影響資料流,其緩衝區必須存在。 若要讓置放作業能夠成功,產生的資料流位置必須位於受控制的序列內。 如果函式影響這兩個數據流位置, _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
要搜尋的位置。
_模式
指定指標位置的模式。 預設為允許您修改讀取和寫入位置。
傳回值
如果函式成功改變一個或兩個資料流位置,則會傳回結果資料流位置。 否則會失敗,並傳回無效的資料流位置。 若要判斷資料流位置是否無效,請比較傳回值與 pos_type(off_type(-1))
。
備註
對於類別basic_stringbuf<Elem、 Tr 的對象, Alloc
>數據流位置純粹是由數據流位移所組成。 位移零指定受控制序列的第一個元素。 新位置是由 _ Sp 所來判斷。
如果 mode & ios_base::in 為非零值,此函式會改變要讀入輸入緩衝區的下一個位置。 如果 mode & ios_base::out 為非零值,此函式會改變要寫入輸出緩衝區的下一個位置。 若要影響資料流,其緩衝區必須存在。 若要讓置放作業能夠成功,產生的資料流位置必須位於受控制的序列內。 否則 (若不影響任一位置),置放作業會失敗。
basic_stringbuf::str
設定或取得字串緩衝區中的文字,而不需要變更寫入位置。
basic_string<Elem, Tr, Alloc> str() const;
void str(
const basic_string<Elem, Tr, Alloc>& _Newstr);
參數
_Newstr
新字串。
傳回值
傳回類別basic_string<Elem、 Tr、 Alloc> 的物件,其受控制序列是 所*this
控制序列的複本。
備註
第一個成員函式會傳回類別basic_string<Elem, Tr, 的物件, Alloc
>其受控制序列是 所 *this
控制之序列的複本。 複製的序列取決於預存的 stringbuf 模式:
如果 mode & ios_base::out 為非零值,而且存在輸出緩衝區,此序列是整個輸出緩衝區 (epptr - pbase 元素,從
pbase
開始)。如果 mode & ios_base::in 為非零值,而且存在輸入緩衝區,此序列是整個輸入緩衝區 (egptr - eback 元素,從
eback
開始)。否則,複製的序列是空的。
第二個成員函式會解除分配目前由 *this
控制的任何序列。 然後,它會配置由 _Newstr 控制的序列複本。 如果 mode & ios_base::in 為非零值,它會設定輸入緩衝區從序列開頭開始讀取。 如果 mode & ios_base::out 為非零值,它會設定輸出緩衝區從序列開頭開始寫入。
範例
// 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
儲存在讀取位置中的元素,並前進輸入緩衝區的下一個指標。
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。