Classe money_get
O modelo de classe descreve um objeto que poderá servir como uma faceta de localidade para controlar as conversões de sequências do tipo CharType
em valores monetários.
Sintaxe
template <class CharType, class InputIterator = istreambuf_iterator<CharType>>
class money_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 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 |
---|---|
money_get | O construtor para objetos do tipo money_get que são usados para extrair valores numéricos das sequências que representam valores monetários. |
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. |
string_type | Um tipo que descreve uma cadeia de caracteres que contém caracteres do tipo CharType . |
Funções de membro
Função de membro | Descrição |
---|---|
do_get | Uma função virtual chamada para extrair um valor numérico de uma sequência de caracteres que representa um valor monetário. |
get | Extrai um valor numérico de uma sequência de caracteres que representa um valor monetário. |
Requisitos
Cabeçalho:<locale>
Namespace: std
money_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.
money_get::d o_get
Uma função virtual chamada para extrair um valor numérico de uma sequência de caracteres que representa um valor monetário.
virtual iter_type do_get(iter_type first,
iter_type last,
bool Intl,
ios_base& Iosbase,
ios_base::iostate& State,
long double& val) const virtual iter_type do_get(iter_type first,
iter_type last,
bool Intl,
ios_base& Iosbase,
ios_base::iostate& State,
string_type& val) const
Parâmetros
first
Iterador de entrada que trata o início da sequência a ser convertido.
last
Iterador de entrada que trata o fim da sequência a ser convertido.
Intl
Um valor booliano que indica o tipo de símbolo de moeda esperado na sequência: true
se internacional, false
se doméstico.
Iosbase
Um sinalizador de formato que quando definido indica que o símbolo de moeda é opcional; caso contrário, será obrigatório.
State
Define os elementos de bitmask apropriados para o estado de fluxo, dependendo se as operações foram bem-sucedidas ou não.
val
Uma cadeia de caracteres que armazena a sequência convertida.
Valor de retorno
Um iterador de entrada que trata o primeiro elemento após o campo de entrada monetário.
Comentários
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 monetária completo e não vazio. Se for bem-sucedido, converterá esse campo em uma sequência de um ou mais dígitos decimais, opcionalmente precedido por um sinal de subtração (-
), para representar a quantidade e armazenar o resultado no objeto string_type val. Ela retorna um iterador que designa o primeiro elemento após o campo de entrada monetário. Caso contrário, a função armazenará uma sequência vazia em val e define ios_base::failbit
em State. Ela retorna um iterador que designa o primeiro elemento após qualquer prefixo de um campo de entrada monetário válido. Em ambos os casos, se o valor retornado for igual a last
, a função definirá ios_base::eofbit
em State
.
A segunda função membro protegida virtual se comporta da mesma maneira que a primeira, exceto que, se bem-sucedida, converterá a sequência de dígitos opcionalmente assinados em um valor do tipo long double
e armazenará esse valor em val.
O formato de um campo de entrada monetária é determinado pela locale facetfac retornada pela chamada efetiva use_facet<moneypunct<CharType, intl>>( iosbase. getloc).
Especificamente:
fac. neg_format determina a ordem na qual os componentes do campo ocorrem.
fac. curr_symbol determina a sequência de elementos que constitui um símbolo de moeda.
fac. positive_sign determina a sequência de elementos que constitui um sinal positivo.
fac. negative_sign determina a sequência de elementos que constitui um sinal negativo.
fac. grouping determina como os dígitos são agrupados à esquerda da vírgula decimal.
fac. thousands_sep determina o elemento que separa grupos de dígitos à esquerda da vírgula decimal.
fac. decimal_point determina o elemento que separa os dígitos de inteiros dos dígitos de fração.
fac. frac_digits determina o número de dígitos de fração significativa à direita de qualquer vírgula decimal. Ao analisar um valor monetário com mais dígitos de fração do são chamados por
frac_digits
,do_get
para de analisar após consumir no máximofrac_digits
caracteres.
Se a cadeia de caracteres de sinal ( fac. negative_sign
ou fac. positive_sign
) tiver mais de um elemento, somente o primeiro elemento será correspondido, em que o elemento igual a money_base::sign aparecerá no padrão de formato ( fac. neg_format
). Todos os elementos restantes são comparados ao final do campo de entrada monetário. Se nenhuma cadeia de caracteres tiver um primeiro elemento que corresponde ao próximo elemento no campo de entrada monetário, a cadeia de caracteres com sinal será assumida como vazia e o sinal positivo.
Se iosbase. flags & showbase é diferente de zero, a string fac. curr_symbol
deverá corresponder onde o elemento igual a money_base::symbol aparece no padrão do formato. Caso contrário, se money_base::symbol ocorrer no final do padrão de formato e se nenhum elemento da sequência de caracteres com sinal continuar a ser correspondido, o símbolo de moeda não será correspondente. Caso contrário, o símbolo de moeda é opcionalmente correspondente.
Se nenhuma instância de fac. thousands_sep
ocorrer na parte de valor do campo de entrada monetário (em que o elemento igual a money_base::value aparece no padrão de formato), não serão impostas restrições de agrupamento. Caso contrário, qualquer restrição de agrupamento é imposta por fac. grouping é imposta. Observe que a sequência de dígitos resultante representa um inteiro cujos dígitos decimais fac. frac_digits
de ordem baixa são considerados à direita da vírgula decimal.
O espaço em branco arbitrário é correspondido onde o elemento igual a money_base::space aparece no padrão de formato, se ele aparecer em um local que não o final do padrão de formato. Caso contrário, nenhum espaço em branco interno é correspondente. Um elemento ch será considerado espaço em branco se use_facet<ctype<CharType>>( iosbase. getloc). is( ctype_base::space, ch) for true
.
Exemplo
Consulte o exemplo de get, que chama do_get
.
money_get::get
Extrai um valor numérico de uma sequência de caracteres que representa um valor monetário.
iter_type get(iter_type first,
iter_type last,
bool Intl,
ios_base& Iosbase,
ios_base::iostate& State,
long double& val) const;
iter_type get(iter_type first,
iter_type last,
bool Intl,
ios_base& Iosbase,
ios_base::iostate& State,
string_type& val) const;
Parâmetros
first
Iterador de entrada que trata o início da sequência a ser convertido.
last
Iterador de entrada que trata o fim da sequência a ser convertido.
Intl
Um valor booliano que indica o tipo de símbolo de moeda esperado na sequência: true
se internacional, false
se doméstico.
Iosbase
Um sinalizador de formato que quando definido indica que o símbolo de moeda é opcional; caso contrário, será obrigatório
State
Define os elementos de bitmask apropriados para o estado de fluxo, dependendo se as operações foram bem-sucedidas.
val
Uma cadeia de caracteres que armazena a sequência convertida.
Valor de retorno
Um iterador de entrada que trata o primeiro elemento após o campo de entrada monetário.
Comentários
Ambas as funções membro retornam do_get(first, last, Intl, Iosbase, State, val)
.
Exemplo
// money_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;
psz << use_facet<moneypunct<char, 1> >(loc).curr_symbol() << "-1.000,56";
basic_stringstream< char > psz2;
psz2 << "-100056" << use_facet<moneypunct<char, 1> >(loc).curr_symbol();
ios_base::iostate st = 0;
long double fVal;
psz.flags( psz.flags( )|ios_base::showbase );
// Which forced the READING the currency symbol
psz.imbue(loc);
use_facet < money_get < char > >( loc ).
get( basic_istream<char>::_Iter( psz.rdbuf( ) ),
basic_istream<char>::_Iter( 0 ), true, psz, st, fVal );
if ( st & ios_base::failbit )
cout << "money_get(" << psz.str( ) << ", intl = 1) FAILED"
<< endl;
else
cout << "money_get(" << psz.str( ) << ", intl = 1) = "
<< fVal/100.0 << endl;
use_facet < money_get < char > >( loc ).
get(basic_istream<char>::_Iter(psz2.rdbuf( )),
basic_istream<char>::_Iter(0), false, psz2, st, fVal);
if ( st & ios_base::failbit )
cout << "money_get(" << psz2.str( ) << ", intl = 0) FAILED"
<< endl;
else
cout << "money_get(" << psz2.str( ) << ", intl = 0) = "
<< fVal/100.0 << endl;
};
money_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 modelo InputIterator.
money_get::money_get
O construtor para objetos do tipo money_get
que são usados para extrair valores numéricos das sequências que representam valores monetários.
explicit money_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 sua significância 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 o objeto base com locale::facet(_Refs).
money_get::string_type
Um tipo que descreve uma cadeia de caracteres que contém caracteres do tipo CharType.
typedef basic_string<CharType, Traits, Allocator> string_type;
Comentários
O tipo descreve uma especialização do modelo de classe basic_string.
Confira também
<locale>
Classe facet
Acesso Thread-Safe na Biblioteca Padrão C++