Namespaces
Variants

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

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

Setzt die Werte der Zeiger, die den Ausgabebereich definieren.

Nach dem Aufruf sind pbase ( ) == pbeg , pptr ( ) == pbeg und epptr ( ) == pend alle true .

Wenn einer der [ pbeg , pend ) kein gültiger Bereich ist, ist das Verhalten undefiniert.

Inhaltsverzeichnis

Parameter

pbeg - Zeiger auf den neuen Anfang des Put-Bereichs
pend - Zeiger auf das neue Ende des Put-Bereichs

Beispiel

#include <array>
#include <cstddef>
#include <iostream>
// Buffer für std::ostream implementiert durch 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-Bereich-Zeiger zur Arbeit mit "buffer" setzen
        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{}; // "buffer" wertinitialisieren
};
int main()
{
    ArrayedStreamBuffer<10> streambuf;
    std::ostream stream(&streambuf);
    stream << "hello";
    stream << ",";
    streambuf.print_buffer();
}

Ausgabe:

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

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 4023 C++98 setp forderte nicht, dass die Ausgabesequenz ein gültiger Bereich sein muss erfordert

Siehe auch

positioniert die Anfangs-, Nächste- und End-Zeiger der Eingabesequenz neu
(geschützte Elementfunktion)