Classe money_put

O modelo de classe descreve um objeto que pode servir como uma faceta de localidade para controlar conversões de valores monetários em sequências do tipo CharType.

Sintaxe

template <class CharType,
    class OutputIterator = ostreambuf_iterator<CharType>>
class money_put : public locale::facet;

Parâmetros

CharType
O tipo usado em um programa para codificar caracteres em uma localidade.

OutputIterator
O tipo de iterador para o qual as funções put monetárias gravam sua saída.

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_put O construtor para objetos do tipo money_put.

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 saída.
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_put Uma função virtual chamada para converter o número ou uma cadeia de caracteres em uma sequência de caracteres que representa um valor monetário.
put Converte o número ou uma cadeia de caracteres em uma sequência de caracteres que representa um valor monetário.

Requisitos

Cabeçalho:<locale>

Namespace: std

money_put::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_put::d o_put

Uma função virtual chamada para converter o número ou uma cadeia de caracteres em uma sequência de caracteres que representa um valor monetário.

virtual iter_type do_put(
    iter_type next,
    bool _Intl,
    ios_base& _Iosbase,
    CharType _Fill,
    const string_type& val) const;

virtual iter_type do_put(
    iter_type next,
    bool _Intl,
    ios_base& _Iosbase,
    CharType _Fill,
    long double val) const;

Parâmetros

avançar
Um iterador que trata o primeiro elemento na cadeia de caracteres inserida.

_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

_Fill
Um caractere que é usado para espaçamento.

val
Um objeto de cadeia de caracteres a ser convertido.

Valor de retorno

Um iterador de saída que aborda uma posição além do último elemento produzido.

Comentários

A primeira função membro protegida virtual gera elementos sequenciais começando em next para produzir um campo de saída monetário do objeto string_type val. A sequência controlada por val deve começar com um ou mais dígitos decimais, opcionalmente precedidos por um sinal de subtração (–), que representa a quantidade. A função retorna um iterador que designa o primeiro elemento além do campo de saída monetário gerado.

A segunda função membro protegida virtual se comporta da mesma maneira que a primeira, exceto que ela efetivamente primeiro converte val em uma sequência de dígitos decimais, opcionalmente precedida por um sinal de subtração e converte essa sequência como acima.

O formato de um campo de saída monetário é determinado pela fac locale facet retornada pela chamada (efetiva) use_facet<moneypunct<CharType, intl>>( iosbase. getloc).

Especificamente:

  • fac. pos_format determina a ordem na qual os componentes do campo são gerados para um valor não negativo.

  • fac. neg_format determina a ordem na qual os componentes do campo são gerados para um valor negativo.

  • fac. curr_symbol determina a sequência de elementos a ser gerada para um símbolo de moeda.

  • fac. positive_sign determina a sequência de elementos a ser gerada para um sinal positivo.

  • fac. negative_sign determina a sequência de elementos a ser gerada para 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 a sequência que separa os dígitos de inteiros de qualquer dígito de fração.

  • fac. frac_digits determina o número de dígitos de fração significativa à direita de qualquer vírgula decimal.

Se a cadeia de caracteres de sinal ( fac. negative_sign ou fac. positive_sign) tiver mais de um elemento, somente o primeiro elemento será gerado, em que o elemento igual a money_base::sign aparecerá no padrão de formato ( fac. neg_format ou fac. pos_format). Todos os elementos restantes são gerados ao final do campo de saída monetário.

Se iosbase. flags & showbase é diferente de zero, a string fac. curr_symbol será gerada quando o elemento igual a money_base::symbol aparece no padrão do formato. Caso contrário, nenhum símbolo de moeda será gerado.

Se nenhuma restrição de agrupamento for imposta por fac. grouping (o primeiro elemento tem o valor CHAR_MAX), então não há instâncias de fac. thousands_sep são gerados na parte de valor do campo de saída monetário (em que o elemento igual a money_base::value aparece no padrão de formato). Se fac. frac_digits for zero, nenhuma instância de fac. decimal_point será gerada após os dígitos decimais. Caso contrário, o campo de saída monetário resultante colocará os dígitos decimais fac. frac_digits de ordem baixa à direita da vírgula decimal.

O preenchimento ocorre para qualquer campo de saída numérico, exceto se iosbase. bandeiras & iosbase. internal for diferente de zero, o preenchimento será gerado quando o elemento igual a money_base::space aparece no padrão de formato, se ele aparecer. Caso contrário, o preenchimento interno ocorrerá antes da sequência gerada. O caractere de preenchimento é fill.

A função chama iosbase. width(0) para redefinir a largura do campo como zero.

Exemplo

Veja o exemplo de put, em que a função membro virtual é chamada por put.

money_put::iter_type

Um tipo que descreve um iterador de saída.

typedef OutputIterator iter_type;

Comentários

O tipo é um sinônimo do parâmetro de modelo OutputIterator.

money_put::money_put

O construtor para objetos do tipo money_put.

explicit money_put(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 seu objeto base com locale::facet( _Refs).

money_put::p ut

Converte o número ou uma cadeia de caracteres em uma sequência de caracteres que representa um valor monetário.

iter_type put(
    iter_type next,
    bool _Intl,
    ios_base& _Iosbase,
    CharType _Fill,
    const string_type& val) const;

iter_type put(
    iter_type next,
    bool _Intl,
    ios_base& _Iosbase,
    CharType _Fill,
    long double val) const;

Parâmetros

avançar
Um iterador que trata o primeiro elemento na cadeia de caracteres inserida.

_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

_Fill
Um caractere que é usado para espaçamento.

val
Um objeto de cadeia de caracteres a ser convertido.

Valor de retorno

Um iterador de saída que aborda uma posição além do último elemento produzido.

Comentários

Ambas as funções membro retornam do_put( next, _Intl, _Iosbase, _Fill, val).

Exemplo

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

int main()
{
    std::locale loc( "german_germany" );
    std::basic_stringstream<char> psz;

    psz.imbue(loc);
    psz.flags(psz.flags() | std::ios_base::showbase); // force the printing of the currency symbol
    std::use_facet<std::money_put<char> >(loc).put(std::basic_ostream<char>::_Iter(psz.rdbuf()), true, psz, ' ', 100012);
    if (psz.fail())
        std::cout << "money_put() FAILED" << std::endl;
    else
        std::cout << "money_put() = \"" << psz.rdbuf()->str() << "\"" << std::endl;
}
money_put() = "EUR1.000,12"

money_put::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 da classe de modelo basic_string cujos objetos podem armazenar sequências de elementos da sequência de origem.

Confira também

<locale>
Classe facet
Acesso Thread-Safe na Biblioteca Padrão C++