Condividi tramite


Classe basic_stringbuf

Descrive un buffer del flusso che controlla la trasmissione di elementi di tipo Elem, i cui tratti di carattere sono determinati dalla classe Tr, verso e da una sequenza di elementi archiviati in un oggetto matrice.

Sintassi

template <class Elem, class Tr = char_traits<Elem>,
    class Alloc = allocator<Elem>>
class basic_stringbuf : public basic_streambuf<Elem, Tr>

Parametri

Alloc
Classe Allocator.

Elem
Tipo di elemento di base della stringa.

Tr
Tratti di carattere specializzati sull'elemento di base della stringa.

Osservazioni:

L'oggetto viene allocato, esteso e liberato come necessario per supportare le modifiche nella sequenza.

Un oggetto della classe basic_stringbuf<Elem, Tr, Alloc> archivia una copia dell'argomento ios_base::openmode dal costruttore come stringbuf modalità:

  • Se mode & ios_base::in è diverso da zero, il buffer di input è accessibile. Per altre informazioni, vedere Classe basic_streambuf.

  • Se mode & ios_base::out è diverso da zero, il buffer di output è accessibile.

Costruttori

Costruttore Descrizione
basic_stringbuf Costruisce un oggetto di tipo basic_stringbuf.

Typedef

Nome tipo Descrizione
allocator_type Il tipo è un sinonimo del parametro modello Alloc.
char_type Associa un nome di tipo al parametro di modello Elem.
int_type Rende questo tipo all'interno dell'ambito basic_filebufequivalente al tipo dello stesso nome nell'ambito Tr .
off_type Rende questo tipo all'interno dell'ambito basic_filebufequivalente al tipo dello stesso nome nell'ambito Tr .
pos_type Rende questo tipo all'interno dell'ambito basic_filebufequivalente al tipo dello stesso nome nell'ambito Tr .
traits_type Associa un nome di tipo al parametro di modello Tr.

Funzioni membro

Funzione membro Descrizione
overflow Una funzione virtuale protetta che può essere chiamata quando viene inserito un nuovo carattere in un buffer pieno.
pbackfail La funzione membro virtuale protetta prova a usare un elemento in un buffer di input, quindi renderlo l'elemento corrente (a cui punta il puntatore successivo).
seekoff La funzione membro virtuale protetta prova a modificare le posizioni correnti per i flussi di controllati.
seekpos La funzione membro virtuale protetta prova a modificare le posizioni correnti per i flussi di controllati.
str Imposta o recupera il testo in un buffer di stringa senza modificare la posizione di scrittura.
scambio
underflow La funzione membro virtuale protetta per estrarre l'elemento corrente dal flusso di input.

Requisiti

Header:<sstream>

Spazio dei nomi: std

basic_stringbuf::allocator_type

Il tipo è un sinonimo del parametro modello Alloc.

typedef Alloc allocator_type;

basic_stringbuf::basic_stringbuf

Costruisce un oggetto di tipo basic_stringbuf.

basic_stringbuf(
    ios_base::openmode _Mode = ios_base::in | ios_base::out);

basic_stringbuf(
    const basic_string<Elem, Tr, Alloc>& str,
    ios_base::openmode _Mode = ios_base::in | ios_base::out);

Parametri

_Modo
Una delle enumerazioni in ios_base::openmode.

str
Un oggetto di tipo basic_string.

Osservazioni:

Il primo costruttore archivia un puntatore null in tutti i puntatori che controllano il buffer di input e il buffer di output. Per altre informazioni, vedere la sezione Note della Classe basic_streambuf. Archivia anche _Mode come modalità stringabuf. Per altre informazioni, vedere la sezione Note della Classe basic_stringbuf.

Il secondo costruttore alloca una copia della sequenza controllata dall'oggetto stringa str. Se _Mode & ios_base::in è diverso da zero, imposta il buffer di input per iniziare la lettura all'inizio della sequenza. Se _Mode & ios_base::out è diverso da zero, imposta il buffer di output per iniziare la scrittura all'inizio della sequenza. Archivia anche _Mode come modalità stringabuf. Per altre informazioni, vedere la sezione Note della Classe basic_stringbuf.

basic_stringbuf::char_type

Associa un nome di tipo al parametro di modello Elem.

typedef Elem char_type;

basic_stringbuf::int_type

Rende questo tipo all'interno dell'ambito di basic_filebuf equivalente al tipo dello stesso nome nell'ambito Tr .

typedef typename traits_type::int_type int_type;

basic_stringbuf::off_type

Rende questo tipo all'interno dell'ambito di basic_filebuf equivalente al tipo dello stesso nome nell'ambito Tr .

typedef typename traits_type::off_type off_type;

basic_stringbuf::overflow

Una funzione virtuale protetta che può essere chiamata quando viene inserito un nuovo carattere in un buffer pieno.

virtual int_type overflow(int_type _Meta = traits_type::eof());

Parametri

_Meta
Carattere da inserire nel buffer o traits_type::eof.

Valore restituito

Se la funzione non riesce, restituisce traits_type::eof. In caso contrario, restituisce traits_type::not_eof(_ Meta).

Osservazioni:

Se _Meta non è uguale a traits_type::eof, la funzione membro virtuale protetta tenta di inserire l'elemento traits_type::to_char_type(_Meta) nel buffer di output. Questa operazione può essere eseguita in vari modi:

  • Se è disponibile una posizione di scrittura, può archiviare l'elemento in tale posizione e incrementare il puntatore successivo per il buffer di output.

  • Una posizione di scrittura può essere resa disponibile allocando spazio di archiviazione nuovo o aggiuntivo per il buffer di output. Questa estensione del buffer di output estende anche eventuali buffer di input associati.

basic_stringbuf::p backfail

La funzione membro virtuale protetta prova a reinserire un elemento nel buffer di input e quindi di renderlo l'elemento corrente a cui punta il puntatore successivo.

virtual int_type pbackfail(int_type _Meta = traits_type::eof());

Parametri

_Meta
Carattere da inserire nel buffer o traits_type::eof.

Valore restituito

Se la funzione non riesce, restituisce traits_type::eof. In caso contrario, restituisce traits_type::not_eof(_ Meta).

Osservazioni:

Se _Meta confronta uguale a traits_type::eof, l'elemento di cui eseguire il pushback è effettivamente quello già presente nel flusso prima dell'elemento corrente. In caso contrario, l'elemento viene sostituito da byte = traits_type::to_char_type(_ Meta). La funzione può reinserire un elemento in vari modi:

  • Se è disponibile una posizione di reinserimento e l'elemento archiviato in tale posizione risulta uguale a byte, può decrementare il puntatore successivo per il buffer di input.

  • Se è disponibile una posizione di reinserimento e la modalità stringbuf consente di modificare la sequenza ( mode & ios_base::out è diverso da zero), la funzione può archiviare byte nella posizione di reinserimento e decrementare il puntatore successivo per il buffer di input.

basic_stringbuf::p os_type

Rende questo tipo all'interno dell'ambito di basic_filebuf equivalente al tipo dello stesso nome nell'ambito Tr .

typedef typename traits_type::pos_type pos_type;

basic_stringbuf::seekoff

La funzione membro virtuale protetta prova a modificare le posizioni correnti per i flussi di controllati.

virtual pos_type seekoff(
    off_type _Off,
    ios_base::seekdir _Way,
    ios_base::openmode _Mode = ios_base::in | ios_base::out);

Parametri

_Spento
Posizione da cercare rispetto a _Way. Per altre informazioni, vedere basic_stringbuf::off_type.

_Maniera
Punto iniziale per le operazioni di offset. Per i valori possibili, vedere ios_base::seekdir.

_Modo
Specifica la modalità per la posizione del puntatore. L'impostazione predefinita consente di modificare le posizioni di lettura e scrittura. Per altre informazioni, vedere ios_base::openmode.

Valore restituito

Restituisce la nuova posizione o una posizione di flusso non valida.

Osservazioni:

Per un oggetto della classe basic_stringbuf<Elem, Tr, Alloc>, una posizione del flusso è costituita essenzialmente da un offset del flusso. L'offset zero designa il primo elemento della sequenza controllata.

La nuova posizione è determinata nel modo seguente:

  • Se _Way == ios_base::beg, la nuova posizione è l'inizio del flusso più _Off.

  • Se _Way == ios_base::cur, la nuova posizione è la posizione corrente del flusso più _Off.

  • Se _Way == ios_base::end, la nuova posizione è la fine del flusso più _Off.

Se _Mode & ios_base::in è diverso da zero, la funzione modifica la successiva posizione da leggere nel buffer di input. Se _Mode & ios_base::out è diverso da zero, la funzione modifica la successiva posizione da scrivere nel buffer di output. Affinché un flusso ne venga interessato, è necessario che esista il relativo buffer. Affinché un'operazione di posizionamento abbia esito positivo, è necessario che la risultante posizione del flusso si trovi all'interno della sequenza controllata. Se la funzione influisce su entrambe le posizioni del flusso, _Way deve essere ios_base::beg o ios_base::end e entrambi i flussi vengono posizionati nello stesso elemento. In caso contrario, o se nessuna posizione ne è influenzata, l'operazione di posizionamento ha esito negativo.

Se la funzione modifica una o entrambe le posizioni del flusso, restituisce la posizione del flusso risultante. In caso contrario, ha esito negativo e restituisce una posizione del flusso non valida.

basic_stringbuf::seekpos

La funzione membro virtuale protetta prova a modificare le posizioni correnti per i flussi di controllati.

virtual pos_type seekpos(pos_type _Sp, ios_base::openmode _Mode = ios_base::in | ios_base::out);

Parametri

_Sp
Posizione da cercare.

_Modo
Specifica la modalità per la posizione del puntatore. L'impostazione predefinita consente di modificare le posizioni di lettura e scrittura.

Valore restituito

Se la funzione modifica una o entrambe le posizioni del flusso, restituisce la posizione del flusso risultante. In caso contrario, ha esito negativo e restituisce una posizione del flusso non valida. Per stabilire se la posizione del flusso non è valida, confrontare il valore restituito con pos_type(off_type(-1)).

Osservazioni:

Per un oggetto della classe basic_stringbuf<Elem, Tr, Alloc>, una posizione del flusso è costituita esclusivamente da un offset di flusso. L'offset zero designa il primo elemento della sequenza controllata. La nuova posizione è determinata da _ Sp.

Se mode & ios_base::in è diverso da zero, la funzione modifica la posizione successiva da leggere nel buffer di input. Se mode & ios_base::out è diverso da zero, la funzione modifica la posizione successiva da scrivere nel buffer di output. Affinché un flusso ne venga interessato, è necessario che esista il relativo buffer. Affinché un'operazione di posizionamento abbia esito positivo, è necessario che la risultante posizione del flusso si trovi all'interno della sequenza controllata. In caso contrario, o se nessuna posizione ne è influenzata, l'operazione di posizionamento ha esito negativo.

basic_stringbuf::str

Imposta o recupera il testo in un buffer di stringa senza modificare la posizione di scrittura.

basic_string<Elem, Tr, Alloc> str() const;
void str(
    const basic_string<Elem, Tr, Alloc>& _Newstr);

Parametri

_Newstr
La nuova stringa.

Valore restituito

Restituisce un oggetto della classe basic_string<Elem, Tr, Alloc> , la cui sequenza controllata è una copia della sequenza controllata da .*this

Osservazioni:

La prima funzione membro restituisce un oggetto della classe basic_string<Elem, Tr, Alloc>, la cui sequenza controllata è una copia della sequenza controllata da *this. La sequenza copiata dipende dalla modalità stringbuf archiviata:

  • Se mode & ios_base::out è diverso da zero ed esiste un buffer di output, la sequenza corrisponde all'intero buffer di output (elementi epptr - pbase che iniziano con pbase).

  • Se mode & ios_base::in è diverso da zero ed esiste un buffer di input, la sequenza corrisponde all'intero buffer di input (elementi egptr - eback che iniziano con eback).

  • In caso contrario, la sequenza copiata è vuota.

La seconda funzione membro dealloca qualsiasi sequenza attualmente controllata da *this. Alloca quindi una copia della sequenza controllata da _Newstr. Se mode & ios_base::in è diverso da zero, imposta il buffer di input per iniziare la lettura all'inizio della sequenza. Se mode & ios_base::out è diverso da zero, imposta il buffer di output per iniziare la scrittura all'inizio della sequenza.

Esempio

// basic_stringbuf_str.cpp
// compile with: /EHsc
#include <iostream>
#include <sstream>

using namespace std;

int main( )
{
   basic_string<char> i( "test" );
   stringstream ss;

   ss.rdbuf( )->str( i );
   cout << ss.str( ) << endl;

   ss << "z";
   cout << ss.str( ) << endl;

   ss.rdbuf( )->str( "be" );
   cout << ss.str( ) << endl;
}
test
zest
be

basic_stringbuf::traits_type

Associa un nome di tipo al parametro di modello Tr.

typedef Tr traits_type;

Osservazioni:

Il tipo è un sinonimo del parametro di modello Tr.

basic_stringbuf::underflow

Funzione virtuale protetta per estrarre l'elemento corrente dal flusso di input.

virtual int_type underflow();

Valore restituito

Se la funzione non riesce, restituisce traits_type::eof. In caso contrario, restituisce l'elemento corrente nel flusso di input, che viene convertito.

Osservazioni:

La funzione membro virtuale protetta tenta di estrarre l'elemento byte corrente dal buffer di input, avanzare la posizione corrente del flusso e restituire l'elemento come traits_type::to_int_type( byte). Questa operazione può essere eseguita in un unico modo: se è disponibile una posizione di lettura, accetta byte come elemento archiviato nella posizione di lettura e avanza il puntatore successivo per il buffer di input.

basic_streambuf::swap

Scambia il contenuto di questo buffer di stringa con un altro buffer di stringa.

void basic_stringbuf<T>::swap(basic_stringbuf& other)

Parametri

other
basic_stringbuf il cui contenuto verrà scambiato con quello di questo elemento basic_stringbuf.

Osservazioni:

basic_stringbuf::operator=

Assegna il contenuto di basic_stringbuf sul lato destro dell'operatore a basic_stringbuf sul lato sinistro.

basic_stringbuf& basic_stringbuf:: operator=(const basic_stringbuf& other)

Parametri

other
Elemento basic_stringbuf il cui contenuto, inclusi i tratti delle impostazioni locali, verrà assegnato all'elemento stringbuf sul lato sinistro dell'operatore.

Osservazioni:

Vedi anche

Thread Safety in the C++ Standard Library (Sicurezza dei thread nella libreria standard C++)
Programmazione iostream
iostreams Conventions (Convenzioni di iostream)