std::basic_streambuf<CharT,Traits>::pubsetbuf、std::basic_streambuf<CharT,Traits>::setbuf
From cppreference.com
< cpp | io | basic streambuf
| public: basic_streambuf<CharT, Traits>* pubsetbuf( char_type* s, std::streamsize n ) |
(1) | |
| protected: virtual basic_streambuf<CharT, Traits>* setbuf( char_type* s, std::streamsize n ) |
(2) | |
1) 最も派生したクラスの setbuf(s, n) を呼び出します。
2) この関数の基底クラスバージョンは効果がありません。派生クラスはこの関数をオーバーライドして、制御された文字シーケンス(バッファ)をユーザー提供の配列で削除または置換できるようにしたり、実装固有のその他の目的のために使用したりできます。
目次 |
[編集] パラメータ
| s | - | ユーザー提供のバッファの最初の CharT へのポインタ |
| n | - | ユーザー提供のバッファ内の CharT 要素の数 |
[編集] 戻り値
1) setbuf(s, n) の戻り値。
2) this
[編集] 例
読み込みのために 10k バッファを提供します。Linux では、strace ユーティリティを使用して実際に読み込まれたバイト数を確認できます。
このコードを実行
#include <fstream> #include <iostream> #include <string> int main() { int cnt = 0; std::ifstream file; char buf[1024 * 10 + 1]; file.rdbuf()->pubsetbuf(buf, sizeof buf); file.open("/usr/share/dict/words"); for (std::string line; getline(file, line);) ++cnt; std::cout << cnt << '\n'; }
実行結果の例
356010
[編集] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 158 | C++98 | setbuf のデフォルトの動作は指定されていたのみgptr() が null でなく、egptr() と等しくない場合 |
何も行わないと指定されました すべてのケースで |
[編集] 関連項目
| [virtual] |
制御文字シーケンスを配列で置き換えようとするstd::basic_stringbuf<CharT,Traits,Allocator> の(仮想保護メンバ関数) |
| [virtual] |
ユーザー提供のバッファを提供する、またはこのファイルバッファをバッファリングなしにする ( std::basic_filebuf<CharT,Traits>の仮想protectedメンバ関数) |
| [virtual] |
制御文字シーケンスを配列で置き換えようとするstd::strstreambuf の(仮想保護メンバ関数) |
| ファイルストリームのバッファを設定する (関数) |