Namespaces
Variants

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

From cppreference.net
protected :
void setp ( char_type * pbeg, char_type * pend ) ;

Establece los valores de los punteros que definen el área de escritura.

Después de la llamada, pbase ( ) == pbeg , pptr ( ) == pbeg y epptr ( ) == pend son todos true .

Si cualquiera de [ pbeg , pend ) no es un rango válido , el comportamiento es indefinido.

Contenidos

Parámetros

pbeg - puntero al nuevo inicio del área de escritura
pend - puntero al nuevo final del área de escritura

Ejemplo

#include <array>
#include <cstddef>
#include <iostream>
// Buffer para std::ostream implementado por 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()
    {
        // punteros del área de escritura para trabajar con "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{}; // inicializar por valor "buffer"
};
int main()
{
    ArrayedStreamBuffer<10> streambuf;
    std::ostream stream(&streambuf);
    stream << "hello";
    stream << ",";
    streambuf.print_buffer();
}

Salida:

h e l l o , \0 \0 \0 \0

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 4023 C++98 setp no requería que la secuencia de salida fuera un rango válido requiere

Véase también

reposiciona los punteros de inicio, siguiente y fin de la secuencia de entrada
(función miembro protegida)