C++ 頭文件系列(streambuf)。本站提示廣大學習愛好者:(C++ 頭文件系列(streambuf))文章只能為提供參考,不一定能成為您想要的結果。以下是C++ 頭文件系列(streambuf)正文
1. 簡介
該頭文件定義了basic_streambuf模版,從字面上看是作為流緩沖區之用。
2. basic_streambuf模版
The class template basic_stream< charT, traits > serves as an abstract base class for deriving various stream buffers whose objects each control two character sequences:
—— a character input sequence;
—— a character output sequence.
上面這段話(摘自C++14草案)的大概意思是說:basic_streambuf模版的目的是作為各種各樣的 派生流緩沖區 的虛基類, 這些流緩沖區控制兩個字符流----一個輸入一個輸出。
2.1 控制 輸入/輸出流
streambuf不直接直接控制輸入輸出流,而是通過兩個數組的六個指針來間接控制:
basc_streambuf模版分別為每一個流指針組提供了5個函數。
2.1.1 輸入流指針函數
- eback : 返回輸入流的首指針。
- gptr : 返回輸入流的當前指針。
- egptr : 返回輸入流的尾指針。
- gbump : 將當前指針前進n步。
- setg : 設置三個輸入流指針。
2.1.2 輸出流指針函數
- pbase : 返回輸出流的首指針。
- pptr : 返回輸出流的當前指針。
- epptr : 返回輸出流的尾指針。
- pbump : 將當前指針步進n步。
- setp : 設置三個輸出流指針。
2.2 virtual函數
這些虛函數為protected,旨在為派生的類提供機會來自定義一些共有的行為。 注意,這些虛函數的定義很抽象(作為基類抽象函數),並且在基類中都 定義為空。
2.2.1 本地化
2.2.2 緩沖區管理和定位
- setbuf : 設置緩沖區。
- seekoff、seekpos : 更改緩沖區中當前字符位置。
- sync : 同步緩沖區與控制字符流。
2.2.3 輸入函數
- showmanyc : 返回輸入字符流中當前大概可獲得的字符數。
- xsgetn : 從輸入字符流中獲取n個字符。
- underflow : 從輸入字符流獲取當前字符,不改變當前位置。(具體作用不是很明白,有待探究)
- uflow : 從輸入字符流獲取當前字符,步進當前位置,默認實現為調用underflow()。
- pbackfail : 將給定字符放回輸入字符流。 該函數僅當沒有放回位置或者放回的字符與緩沖區中的字符不一致時才被調用,故後綴fail。
2.2.4 輸出函數
- xsputn : 將n個字符寫到輸出字符流。
- overflow : 將字符寫到輸出字符流。
2.3 public函數
2.3.1 本地化
- pubimbue : 調用虛函數imbue。
- getloc : 返回當前本地化對象(locale)。
2.3.2 緩沖區管理和定位
- pubsetbuf :調用虛函數setbuf。
- pubseekoff : 調用虛函數seekoff。
- pubsync : 調用虛函數sync。
2.3.3 輸入函數
- in_avail : 如果讀取位置可獲得,返回當前可獲得的字符數;否則,調用虛函數showmanyc。
- snextc : 步進當前位置,並且返回當前字符。
- sbumpc : 如果輸入流讀取位置可獲得,獲取當前字符,並且步進當前位置; 否則,調用虛函數uflow。
- sgetc : 如果輸入流讀取位置可獲得,返回當前字符; 否則,調用虛函數underflow。
- sgetn : 獲取n個字符,調用虛函數xsgetn。
- sputbackc : 放回給定字符,若無法放回則調用虛函數pbackfail。
- sungetc : 遞減當前位置,並返回當前字符。
2.3.4 輸出函數
- sputc : 如果輸出流寫位置可獲得,輸出一個字符; 否則,調用虛函數overflow。
- sputn : 輸出n個字符,調用虛函數xsputn。
3 typedefs
typedef basic_streambuf<char> streambuf;
typedef basic_streambuf<wchar_t> wstreambuf;