Namespaces
Variants

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

From cppreference.net
protected :
void setg ( char_type * gbeg, char_type * gcurr, char_type * gend ) ;

Définit les valeurs des pointeurs délimitant la zone de récupération.

Après l'appel, eback ( ) == gbeg , gptr ( ) == gcurr et egptr ( ) == gend sont tous true .

Si l'un des intervalles [ gbeg , gend ) , [ gbeg , gcurr ) et [ gcurr , gend ) n'est pas un intervalle valide , le comportement est indéfini.

Table des matières

Paramètres

gbeg - pointeur vers le nouveau début de la zone de lecture
gcurr - pointeur vers le nouveau caractère courant ( get pointer ) dans la zone de lecture
gend - pointeur vers la nouvelle fin de la zone de lecture

Exemple

#include <iostream>
#include <sstream>
class null_filter_buf : public std::streambuf
{
    std::streambuf* src;
    char ch; // single-byte buffer
protected:
    int underflow()
    {
        traits_type::int_type i;
        while ((i = src->sbumpc()) == '\0')
            ; // skip zeroes
        if (!traits_type::eq_int_type(i, traits_type::eof()))
        {
            ch = traits_type::to_char_type(i);
            setg(&ch, &ch, &ch+1); // make one read position available
        }
        return i;
    }
public:
    null_filter_buf(std::streambuf* buf) : src(buf)
    {
        setg(&ch, &ch + 1, &ch + 1); // buffer is initially full
    }
};
void filtered_read(std::istream& in)
{
    std::streambuf* orig = in.rdbuf();
    null_filter_buf buf(orig);
    in.rdbuf(&buf);
    for (char c; in.get(c);)
        std::cout << c;
    in.rdbuf(orig);
}
int main()
{
    char a[] = "This i\0s \0an e\0\0\0xample";
    std::istringstream in(std::string(std::begin(a), std::end(a)));
    filtered_read(in);
}

Sortie :

This is an example

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR S'applique à Comportement tel que publié Comportement correct
LWG 4023 C++98 setg n'exigeait pas que la séquence d'entrée soit un intervalle valide exige

Voir aussi

repositionne les pointeurs de début, suivant et de fin de la séquence de sortie
(fonction membre protégée)