Partilhar via


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áximo frac_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++