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

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

设置定义放置区的指针值。特别是调用后 pbase() == pbegpptr() == pbegepptr() == pend

参数

pbeg - 指向放置区新起始的指针
pend - 指向放置区新结尾的指针

返回值

(无)

示例

#include <iostream>
#include <array>
 
// 以 std::array 实现的 std::ostream 缓冲区
template<std::size_t SIZE, class CharT = char>
class ArrayedStreamBuffer : public std::basic_streambuf<CharT>
{
public:
    using Base = std::basic_streambuf<CharT>;
    using char_type = typename Base::char_type;
 
    ArrayedStreamBuffer() : buffer_{} // 值初始化 buffer_ 为全零
    {
        Base::setp(buffer_.begin(), buffer_.end()); // 设置 std::basic_streambuf
            // 放置区指针以 'buffer_' 工作
    }
 
    void print_buffer()
    {
        for (const auto& i: buffer_) {
            if (i == 0) {
                std::cout << "NULL";
            } else {
                std::cout << i;
            }
            std::cout << " ";
        }
        std::cout << "\n";
    }
 
private:
    std::array<char_type, SIZE> buffer_;
};
 
int main()
{
    ArrayedStreamBuffer<10> streambuf;
    std::ostream stream(&streambuf);
 
    stream << "hello";
    stream << ",";
 
    streambuf.print_buffer();
}

输出:

h e l l o , NULL NULL NULL NULL

参阅

重定位输出序列的起始、下一位置和终止指针
(受保护成员函数)