Spec-Zone.ru › C++

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

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++.

Отчёт об ошибке Применяется к Опубликованное поведение Правильное поведение
LWG 4023 C++98 setp не требовал, чтобы выходная последовательность была допустимым диапазоном требует

См. также

setg
перемещает указатели начала, следующего элемента и конца входной последовательности
(защищённая функция-член)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/basic_streambuf/setp

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API