std::basic_streambuf<CharT,Traits>::setp
From cppreference.com
< cpp | io | basic streambuf
| protected: void setp( char_type* pbeg, char_type* pend ); |
||
出力領域を定義するポインタの値を設定します。
呼び出し後、pbase() == pbeg、pptr() == pbeg、および epptr() == pend はすべて true になります。
[pbeg, pend) が有効な範囲でない場合、未定義の動作となります。
目次 |
[編集] パラメータ
| pbeg | - | 出力領域の新しい開始位置を指すポインタ |
| pend | - | 出力領域の新しい終了位置を指すポインタ |
[編集] 例
このコードを実行
#include <array> #include <cstddef> #include <iostream> // Buffer for std::ostream implemented by std::array template<std::size_t size, class CharT = char> struct ArrayedStreamBuffer : std::basic_streambuf<CharT> { using Base = std::basic_streambuf<CharT>; using char_type = typename Base::char_type; ArrayedStreamBuffer() { // put area pointers to work with “buffer” Base::setp(buffer.data(), buffer.data() + size); } void print_buffer() { for (char_type i : buffer) { if (i == 0) std::cout << "\\0"; else std::cout << i; std::cout << ' '; } std::cout << '\n'; } private: std::array<char_type, size> buffer{}; // value-initialize “buffer” }; int main() { ArrayedStreamBuffer<10> streambuf; std::ostream stream(&streambuf); stream << "hello"; stream << ","; streambuf.print_buffer(); }
出力
h e l l o , \0 \0 \0 \0
[編集] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 4023 | C++98 | setp は出力シーケンスが有効な範囲であることを要求していませんでした |
要求するようになった |
[編集] 関連項目
| 入力シーケンスの先頭、次、および末尾のポインタを再配置する (protected メンバ関数) |