Partilhar via


basic_stringbuf Classe

Descreve um buffer de fluxo que controla a transmissão de elementos do tipo Elem, cujas características de caracteres são determinadas pela classe Tr, de e para uma sequência de elementos armazenados em um objeto de matriz.

Sintaxe

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

Parâmetros

Alloc
A classe alocator.

Elem
O tipo do elemento básico da cadeia de caracteres.

Tr
Os traços de caráter especializaram-se no elemento básico da cadeia de caracteres.

Observações

O objeto é alocado, estendido e liberado conforme necessário para acomodar alterações na sequência.

Um objeto de classe basic_stringbuf<Elem, Tr, Alloc> armazena uma cópia do ios_base:: argumento openmode de seu construtor como seu stringbufmodo de modo:

  • Se mode & ios_base::in for diferente de zero, o buffer de entrada estará acessível. Para obter mais informações, consulte basic_streambuf classe.

  • Se mode & ios_base::out for diferente de zero, o buffer de saída estará acessível.

Construtores

Construtor Descrição
basic_stringbuf Constrói um objeto do tipo basic_stringbuf.

Typedefs (definições de tipos)

Nome do tipo Descrição
allocator_type O tipo é um sinônimo para o parâmetro de modelo Alloc.
char_type Associa um nome de tipo ao parâmetro de modelo Elem .
int_type Torna esse tipo dentro basic_filebufdo escopo equivalente ao tipo do mesmo nome no escopo Tr .
off_type Torna esse tipo dentro basic_filebufdo escopo equivalente ao tipo do mesmo nome no escopo Tr .
pos_type Torna esse tipo dentro basic_filebufdo escopo equivalente ao tipo do mesmo nome no escopo Tr .
traits_type Associa um nome de tipo ao parâmetro de modelo Tr .

Funções de membro

Função de membro Descrição
transbordamento Uma função virtual protegida que pode ser chamada quando um novo caractere é inserido em um buffer completo.
Pbackfail A função de membro virtual protegido tenta colocar de volta um elemento no buffer de entrada e, em seguida, torna-o o elemento atual (apontado pelo ponteiro seguinte).
Busca A função de membro virtual protegido tenta alterar as posições atuais para os fluxos controlados.
Seekpos A função de membro virtual protegido tenta alterar as posições atuais para os fluxos controlados.
STR Define ou obtém o texto em um buffer de cadeia de caracteres sem alterar a posição de gravação.
permuta
subfluxo A função de membro virtual protegido para extrair o elemento atual do fluxo de entrada.

Requerimentos

Cabeçalho:<Sstream>

Espaço de nomes: std

basic_stringbuf::allocator_type

O tipo é um sinônimo para o parâmetro de modelo Alloc.

typedef Alloc allocator_type;

basic_stringbuf::basic_stringbuf

Constrói um objeto do 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);

Parâmetros

_Mode
Uma das enumerações em ios_base::openmode.

STR
Um objeto do tipo basic_string.

Observações

O primeiro construtor armazena um ponteiro nulo em todos os ponteiros que controlam o buffer de entrada e o buffer de saída. Para obter mais informações, consulte a seção Comentários da classe basic_streambuf. Ele também armazena _Mode como o modo stringbuf. Para obter mais informações, consulte a seção Comentários da classe basic_stringbuf.

O segundo construtor aloca uma cópia da sequência controlada pelo objeto string str. Se _Mode & ios_base::in for diferente de zero, ele define o buffer de entrada para iniciar a leitura no início da sequência. Se _Mode & ios_base::out for diferente de zero, ele define o buffer de saída para começar a gravar no início da sequência. Ele também armazena _Mode como o modo stringbuf. Para obter mais informações, consulte a seção Comentários da classe basic_stringbuf.

basic_stringbuf::char_type

Associa um nome de tipo ao parâmetro de modelo Elem .

typedef Elem char_type;

basic_stringbuf::int_type

Torna esse tipo dentro do escopo do basic_filebuf equivalente ao tipo do mesmo nome no Tr escopo.

typedef typename traits_type::int_type int_type;

basic_stringbuf::off_type

Torna esse tipo dentro do escopo do basic_filebuf equivalente ao tipo do mesmo nome no Tr escopo.

typedef typename traits_type::off_type off_type;

basic_stringbuf::estouro

Uma função virtual protegida que pode ser chamada quando um novo caractere é inserido em um buffer completo.

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

Parâmetros

_Meta
O caractere a ser inserido no buffer ou traits_type::eof.

Valor de retorno

Se a função não for bem-sucedida, ela retornará traits_type::eof. Caso contrário, ele retorna traits_type::not_eof(_ Meta).

Observações

Se _Meta não for comparável a traits_type::eof, a função de membro virtual protegido tentará inserir o elemento traits_type::to_char_type(_Meta) no buffer de saída. Pode fazê-lo de várias formas:

  • Se uma posição de gravação estiver disponível, ela poderá armazenar o elemento na posição de gravação e incrementar o próximo ponteiro para o buffer de saída.

  • Ele pode disponibilizar uma posição de gravação alocando armazenamento novo ou adicional para o buffer de saída. Estender o buffer de saída dessa maneira também estende qualquer buffer de entrada associado.

basic_stringbuf::p backfail

A função de membro virtual protegido tenta colocar de volta um elemento no buffer de entrada e, em seguida, torná-lo o elemento atual (apontado pelo ponteiro seguinte).

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

Parâmetros

_Meta
O caractere a ser inserido no buffer ou traits_type::eof.

Valor de retorno

Se a função não for bem-sucedida, ela retornará traits_type::eof. Caso contrário, ele retorna traits_type::not_eof(_ Meta).

Observações

Se _Meta comparar igual a traits_type::eof, o elemento a ser empurrado para trás é efetivamente aquele que já está no fluxo antes do elemento atual. Caso contrário, esse elemento é substituído por byte = traits_type::to_char_type(_ Meta). A função pode colocar de volta um elemento de várias maneiras:

  • Se uma posição de putback estiver disponível e o elemento armazenado lá for comparado igual a byte, ele poderá diminuir o ponteiro seguinte para o buffer de entrada.

  • Se uma posição putback estiver disponível, e se o modo stringbuf permitir que a sequência seja alterada ( mode & ios_base::out é diferente de zero), ele pode armazenar byte na posição putback e diminuir o ponteiro seguinte para o buffer de entrada.

basic_stringbuf::p os_type

Torna esse tipo dentro do escopo do basic_filebuf equivalente ao tipo do mesmo nome no Tr escopo.

typedef typename traits_type::pos_type pos_type;

basic_stringbuf::seekoff

A função de membro virtual protegido tenta alterar as posições atuais para os fluxos controlados.

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

Parâmetros

_Off
A posição a procurar em relação a _Way. Para obter mais informações, consulte basic_stringbuf::off_type.

_Way
O ponto de partida para as operações de compensação. Consulte ios_base::seekdir para valores possíveis.

_Mode
Especifica o modo para a posição do ponteiro. O padrão é permitir que você modifique as posições de leitura e gravação. Para obter mais informações, consulte ios_base::openmode.

Valor de retorno

Retorna a nova posição ou uma posição de fluxo inválida.

Observações

Para um objeto de classe basic_stringbuf<Elem, Tr, Alloc>, uma posição de fluxo consiste puramente em um deslocamento de fluxo. O deslocamento zero designa o primeiro elemento da sequência controlada.

A nova posição é determinada da seguinte forma:

  • Se _Way == ios_base::beg, a nova posição é o início do fluxo mais _Off.

  • Se _Way == ios_base::cur, a nova posição é a posição de fluxo atual mais _Off.

  • Se _Way == ios_base::end, a nova posição é o final do fluxo mais _Off.

Se _Mode & ios_base::in for diferente de zero, a função altera a próxima posição a ser lida no buffer de entrada. Se _Mode & ios_base::out for diferente de zero, a função altera a próxima posição para gravar no buffer de saída. Para que um fluxo seja afetado, seu buffer deve existir. Para que uma operação de posicionamento seja bem-sucedida, a posição resultante do fluxo deve estar dentro da sequência controlada. Se a função afeta ambas as posições de fluxo, _Way deve ser ios_base::beg ou ios_base::end e ambos os fluxos são posicionados no mesmo elemento. Caso contrário (ou se nenhuma das posições for afetada), a operação de posicionamento falhará.

Se a função conseguir alterar uma ou ambas as posições do fluxo, ela retornará a posição do fluxo resultante. Caso contrário, ele falhará e retornará uma posição de fluxo inválida.

basic_stringbuf::seekpos

A função de membro virtual protegido tenta alterar as posições atuais para os fluxos controlados.

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

Parâmetros

_Sp
A posição a procurar.

_Mode
Especifica o modo para a posição do ponteiro. O padrão é permitir que você modifique as posições de leitura e gravação.

Valor de retorno

Se a função conseguir alterar uma ou ambas as posições do fluxo, ela retornará a posição do fluxo resultante. Caso contrário, ele falhará e retornará uma posição de fluxo inválida. Para determinar se a posição do fluxo é inválida, compare o valor de retorno com pos_type(off_type(-1)).

Observações

Para um objeto da classe basic_stringbuf<Elem, Tr, Alloc>, uma posição de fluxo consiste puramente em um deslocamento de fluxo. O deslocamento zero designa o primeiro elemento da sequência controlada. A nova posição é determinada por _ Sp.

Se o modo & ios_base::in for diferente de zero, a função alterará a próxima posição a ser lida no buffer de entrada. Se o modo & ios_base::out for diferente de zero, a função alterará a próxima posição a ser gravada no buffer de saída. Para que um fluxo seja afetado, seu buffer deve existir. Para que uma operação de posicionamento seja bem-sucedida, a posição resultante do fluxo deve estar dentro da sequência controlada. Caso contrário (ou se nenhuma das posições for afetada), a operação de posicionamento falhará.

basic_stringbuf::str

Define ou obtém o texto em um buffer de cadeia de caracteres sem alterar a posição de gravação.

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

Parâmetros

_Newstr
A nova cadeia de caracteres.

Valor de retorno

Retorna um objeto da classe basic_string<Elem, Tr, Alloc >, cuja sequência controlada é uma cópia da sequência controlada por *this.

Observações

A primeira função de membro retorna um objeto de classe basic_string<Elem, Tr, Alloc>cuja sequência controlada é uma cópia da sequência controlada por *this. A sequência copiada depende do modo stringbuf armazenado:

  • Se o modo & ios_base::out for diferente de zero e existir um buffer de saída, a sequência será todo o buffer de saída ( epptr - pbase elements começando com pbase).

  • Se o modo & ios_base::in for diferente de zero e existir um buffer de entrada, a sequência será todo o buffer de entrada ( egptr - eback elements starting with eback).

  • Caso contrário, a sequência copiada estará vazia.

A segunda função de membro deslocaliza qualquer sequência atualmente controlada pelo *this. Em seguida, atribui uma cópia da sequência controlada por _Newstr. Se o modo & ios_base::in for diferente de zero, ele define o buffer de entrada para iniciar a leitura no início da sequência. Se o modo & ios_base::out for diferente de zero, ele define o buffer de saída para começar a gravar no início da sequência.

Exemplo

// 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 um nome de tipo ao parâmetro de modelo Tr .

typedef Tr traits_type;

Observações

O tipo é um sinônimo para o parâmetro de modelo Tr.

basic_stringbuf::fluxo inferior

Função virtual protegida para extrair o elemento atual do fluxo de entrada.

virtual int_type underflow();

Valor de retorno

Se a função não for bem-sucedida, ela retornará traits_type::eof. Caso contrário, ele retorna o elemento atual no fluxo de entrada, que é convertido.

Observações

A função de membro virtual protegido tenta extrair o elemento byte atual do buffer de entrada, avançar a posição do fluxo atual e retornar o elemento como traits_type::to_int_type( byte). Ele pode fazer isso de uma maneira: se uma posição de leitura estiver disponível, ela será byte tomada como o elemento armazenado na posição de leitura e avançará o próximo ponteiro para o buffer de entrada.

basic_streambuf::swap

Troca o conteúdo desse buffer de cadeia de caracteres por outro buffer de cadeia de caracteres.

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

Parâmetros

outros
O basic_stringbuf cujo conteúdo será trocado com este basic_stringbuf.

basic_stringbuf::operador=

Atribui o conteúdo do basic_stringbuf no lado direito do operador ao basic_stringbuf no lado esquerdo.

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

Parâmetros

outros
Um basic_stringbuf cujo conteúdo, incluindo características de localidade, será atribuído ao stringbuf no lado esquerdo do operador.

Ver também

segurança de threads na biblioteca padrão C++
Programação iostream
iostreams Convenções