Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Um modelo de classe que descreve um objeto que pode servir como uma faceta de localidade para controlar conversões de sequências do tipo CharType em valores numéricos.
Sintaxe
template <class CharType, class InputIterator = istreambuf_iterator<CharType>>
class num_get : public locale::facet;
Parâmetros
CharType
O tipo usado em um programa para codificar caracteres em uma localidade.
InputIterator
O tipo de iterador do qual as funções get numéricas leem sua entrada.
Comentários
Como qualquer faceta de localidade, a ID de objeto estático tem um valor armazenado inicial de zero. A primeira tentativa de acessar seu valor armazenado armazena um valor positivo exclusivo na id.
Construtores
| Construtor | Descrição |
|---|---|
| num_get | O construtor para objetos do tipo num_get que são usados para extrair valores numéricos das sequências. |
Typedefs
| Nome do tipo | Descrição |
|---|---|
| char_type | Um tipo que é usado para descrever um caractere usado por uma localidade. |
| iter_type | Um tipo que descreve um iterador de entrada. |
Funções de membro
| Função de membro | Descrição |
|---|---|
| do_get | Uma função virtual que é chamada para extrair um valor numérico ou booliano de uma sequência de caracteres. |
| get | Extrai um valor numérico ou booliano de uma sequência de caracteres. |
Requisitos
Cabeçalho:<locale>
Namespace: std
num_get::char_type
Um tipo que é usado para descrever um caractere usado por uma localidade.
typedef CharType char_type;
Comentários
O tipo é um sinônimo do parâmetro de modelo CharType.
num_get::d o_get
Uma função virtual que é chamada para extrair um valor numérico ou booliano de uma sequência de caracteres.
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned short& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned int& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long long& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long long& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
float& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
double& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long double& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
void *& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
bool& val) const;
Parâmetros
first
O início do intervalo de caracteres do qual o número será lido.
last
O fim do intervalo de caracteres do qual o número será lido.
iosbase
O ios_base cujos sinalizadores são usados pela conversão.
state
O estado para o qual failbit (consulte ios_base::iostate) é adicionado após a falha.
val
O valor que foi lido.
Valor de retorno
O iterador depois que o valor foi lido.
Comentários
A primeira função membro virtual protegida,
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long& val) const;
corresponde a elementos sequenciais começando no primeiro da sequência [first, last) até que tenha reconhecido um campo de entrada de número inteiro completo e não vazio. Se for bem-sucedido, converte esse campo em seu valor equivalente como o tipo long e armazena o resultado em val. Ele retorna um iterador que designa o primeiro elemento além do campo de entrada numérico. Caso contrário, a função não armazena nada em val e define ios_base::failbit em state. Ele retorna um iterador que designa o primeiro elemento além de qualquer prefixo de um campo de entrada de inteiro válido. Em ambos os casos, se o valor retornado for igual a last, a função definirá ios_base::eofbit em state.
O campo de entrada de inteiro é convertido pelas mesmas regras usadas pelas funções de verificação de correspondência e pela conversão de uma série de elementos char de um arquivo. (Supõe-se que cada elemento char seja mapeado para um elemento equivalente do tipo Elem por um mapeamento simples, um para um). A especificação de conversão de varredura equivalente é determinada da seguinte forma:
Se iosbase.ios_base::flags() & ios_base::basefield == ios_base::oct, a especificação de conversão é lo.
Se iosbase.flags() & ios_base::basefield == ios_base::hex, a especificação de conversão é lx.
Se iosbase.flags() & ios_base::basefield == 0, a especificação de conversão é li.
Caso contrário, a especificação de conversão é ld.
O formato de um campo de entrada inteiro é determinado ainda mais pela faceta de localidade retornada pela chamada use_facet <numpunct<Elem>(iosbase.ios_base::getloc.())fac Especificamente:
fac.numpunct::grouping() determina como os dígitos são agrupados à esquerda de qualquer vírgula decimal
fac.numpunct::thousands_sep() determina a sequência que separa grupos de dígitos à esquerda de qualquer vírgula decimal.
Se nenhuma instância de fac.thousands_sep() ocorrer no campo de entrada numérico, nenhuma restrição de agrupamento é imposta. Caso contrário, qualquer restrição de agrupamento imposta pelo fac.grouping() será imposta e os separadores serão removidos antes que a verificação de conversão ocorra.
A quarta função membro virtual protegida:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long& val) const;
comporta-se da mesma maneira que a primeira, exceto que substitui uma especificação de conversão de ld por lu. Se bem-sucedido, converte o campo de entrada numérico em um valor do tipo unsigned long e armazena esse valor em val.
A quinta função membro virtual protegida:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long long& val) const;
comporta-se da mesma maneira que a primeira, exceto que substitui uma especificação de conversão de ld por lld. Se bem-sucedido, converte o campo de entrada numérico em um valor do tipo long long e armazena esse valor em val.
A sexta função membro virtual protegida:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long long& val) const;
comporta-se da mesma maneira que a primeira, exceto que substitui uma especificação de conversão de ld por llu. Se bem-sucedido, converte o campo de entrada numérico em um valor do tipo unsigned long long e armazena esse valor em val.
A sétima função membro virtual protegida:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
float& val) const;
comporta-se da mesma maneira que a primeira, exceto que esforça-se para corresponder a um campo de entrada de ponto flutuante completo e não vazio. fac.numpunct::decimal_point() determina a sequência que separa os dígitos de inteiro dos dígitos de fração. O especificador de conversão de verificação equivalente é lf.
A oitava função membro virtual protegida:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
double& val) const;
comporta-se da mesma maneira que a primeira, exceto que esforça-se para corresponder a um campo de entrada de ponto flutuante completo e não vazio. fac.numpunct::decimal_point() determina a sequência que separa os dígitos de inteiro dos dígitos de fração. O especificador de conversão de verificação equivalente é lf.
A nona função membro virtual protegida:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long double& val) const;
comporta-se da mesma maneira que a oitava, exceto que o especificador de conversão de verificação equivalente é Lf.
A décima função membro virtual protegida:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
void *& val) const;
comporta-se da mesma maneira que a primeira, exceto que o especificador de conversão de verificação equivalente é p.
A última (décima primeira) função membro virtual protegida:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
bool& val) const;
comporta-se da mesma maneira que a primeira, exceto que esforça-se para corresponder a um campo de entrada booliano completo e não vazio. Se bem-sucedido, converte o campo de entrada booliano em um valor do tipo bool e armazena esse valor em val.
Um campo de entrada Booliano adota um de dois formatos. Se iosbase.flags() & ios_base::boolalpha for false, será o mesmo que um campo de entrada inteiro, exceto que o valor convertido deve ser 0 (para false) ou 1 (para true). Caso contrário, a sequência deve corresponder a fac.numpunct::falsename() (para falso) ou fac.numpunct::truename() (para verdadeiro).
Exemplo
Veja o exemplo de obter, em que a função membro virtual é chamada por do_get.
num_get::get
Extrai um valor numérico ou booliano de uma sequência de caracteres.
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
bool& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned short& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned int& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long long& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long long& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
float& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
double& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long double& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
void *& val) const;
Parâmetros
first
O início do intervalo de caracteres do qual o número será lido.
last
O fim do intervalo de caracteres do qual o número será lido.
iosbase
O ios_base cujos sinalizadores são usados pela conversão.
state
O estado para o qual failbit (consulte ios_base::iostate) é adicionado após a falha.
val
O valor que foi lido.
Valor de retorno
O iterador depois que o valor foi lido.
Comentários
Todas as funções membro retornam do_get( first, last, iosbase, state, val).
A primeira função membro virtual protegida virtual tenta corresponder elementos sequenciais, começando pelo primeiro na sequência [ first, last) até ter reconhecido um campo de entrada inteiro completo e não vazio. Se for bem-sucedido, converte esse campo em seu valor equivalente como o tipo long e armazena o resultado em val. Ele retorna um iterador que designa o primeiro elemento além do campo de entrada numérico. Caso contrário, a função não armazena nada em val e define ios_base::failbit em state. Ele retorna um iterador que designa o primeiro elemento além de qualquer prefixo de um campo de entrada de inteiro válido. Em ambos os casos, se o valor retornado for igual a last, a função define ios_base::eofbit em state.
O campo de entrada de inteiro é convertido pelas mesmas regras usadas pelas funções de verificação de correspondência e pela conversão de uma série de elementos char de um arquivo. Cada elemento char é considerado mapeado para um elemento equivalente do tipo CharType por um mapeamento um para um simples. A especificação de conversão de verificação equivalente é determinada da seguinte forma:
Se
iosbase.flags& ios_base::basefield == ios_base::oct, a especificação de conversão serálo.Se
iosbase.flags & ios_base::basefield == ios_base::hex, a especificação de conversão élx.Se
iosbase.flags & ios_base::basefield == 0, a especificação de conversão éli.Caso contrário, a especificação de conversão é
ld.
O formato de um campo de entrada inteiro é determinado ainda mais pela faceta de localidade retornada pela chamada use_facetnumpunct<<Elem>(iosbase.getloc.()) fac Especificamente:
fac.grouping determina como os dígitos são agrupados à esquerda da vírgula decimal.fac.thousands_sep determina a sequência que separa grupos de dígitos à esquerda da vírgula decimal
Se nenhuma instância de fac.thousands_sep ocorrer no campo de entrada numérico, nenhuma restrição de agrupamento é imposta. Caso contrário, qualquer restrição de agrupamento imposta pelo fac.grouping será imposta e os separadores serão removidos antes que a verificação de conversão ocorra.
A segunda função membro virtual protegida:
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long& val) const;
comporta-se da mesma maneira que a primeira, exceto que substitui uma especificação de conversão de ld por lu. Se bem-sucedido, converte o campo de entrada numérico em um valor do tipo unsigned long e armazena esse valor em val.
A terceira função membro virtual protegida:
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
double& val) const;
comporta-se da mesma maneira que a primeira, exceto que esforça-se para corresponder a um campo de entrada de ponto flutuante completo e não vazio. fac.decimal_point determina a sequência que separa os dígitos de inteiros dos dígitos de fração. O especificador de conversão de verificação equivalente é lf.
A quarta função membro virtual protegida:
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long double& val) const;
comporta-se da mesma maneira que a terceira, exceto que o especificador de conversão de verificação equivalente é Lf.
A quinta função membro virtual protegida:
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
void *& val) const;
comporta-se da mesma maneira que a primeira, exceto que o especificador de conversão de verificação equivalente é p.
A sexta função membro virtual protegida:
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
bool& val) const;
comporta-se da mesma maneira que a primeira, exceto que tenta corresponder a um campo de entrada booliano completo e não vazio. Se bem-sucedido, converte o campo de entrada booliano em um valor do tipo bool e armazena esse valor em val.
Um campo de entrada booliano adota um de dois formatos. Se iosbase.flags & ios_base::boolalpha for false, será o mesmo que um campo de entrada inteiro, exceto que o valor convertido deve ser 0 (para false) ou 1 (para true). Caso contrário, a sequência deve corresponder a fac.falsename (para false) ou fac.truename (para true).
Exemplo
// num_get_get.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <sstream>
using namespace std;
int main( )
{
locale loc( "german_germany" );
basic_stringstream<char> psz, psz2;
psz << "-1000,56";
ios_base::iostate st = 0;
long double fVal;
cout << use_facet <numpunct <char> >(loc).thousands_sep( ) << endl;
psz.imbue( loc );
use_facet <num_get <char> >
(loc).get( basic_istream<char>::_Iter( psz.rdbuf( ) ),
basic_istream<char>::_Iter(0), psz, st, fVal );
if ( st & ios_base::failbit )
cout << "money_get( ) FAILED" << endl;
else
cout << "money_get( ) = " << fVal << endl;
}
num_get::iter_type
Um tipo que descreve um iterador de entrada.
typedef InputIterator iter_type;
Comentários
O tipo é um sinônimo do parâmetro de modeloInputIterator.
num_get::num_get
O construtor para objetos do tipo num_get que são usados para extrair valores numéricos das sequências.
explicit num_get(size_t refs = 0);
Parâmetros
refs
Valor inteiro usado para especificar o tipo de gerenciamento de memória do objeto.
Comentários
Os valores possíveis para o parâmetro refs e o significado são:
0: o tempo de vida do objeto é gerenciado pelas localidades que o contêm.
1: o tempo de vida do objeto deve ser gerenciado manualmente.
> 1: esses valores não estão definidos.
Nenhum exemplo direto é possível, pois o destruidor está protegido.
O construtor inicializa seu objeto base com locale::facet(refs).
Confira também
<locale>
Classe facet
Acesso Thread-Safe na Biblioteca Padrão C++