名前空間
変種
操作

std::basic_streambuf<CharT,Traits>::setp

From cppreference.com
< cpp‎ | io‎ | basic streambuf
 
 
 
 
protected:
void setp( char_type* pbeg, char_type* pend );

出力領域を定義するポインタの値を設定します。

呼び出し後、pbase() == pbegpptr() == pbeg、および epptr() == pend はすべて true になります。

[pbegpend)有効な範囲でない場合、未定義の動作となります。

目次

[編集] パラメータ

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 メンバ関数) [編集]
English 日本語 中文(简体) 中文(繁體)