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 valores numéricos em sequências do tipo CharType.
Sintaxe
template <class CharType,
class OutputIterator = ostreambuf_iterator<CharType>>
class num_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 numéricas 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 |
|---|---|
| num_put | O construtor para objetos do tipo num_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. |
Funções de membro
| Função de membro | Descrição |
|---|---|
| do_put | Uma função virtual que é chamada para converter um número em uma sequência de CharTypes que representa o número formatado para uma determinada localidade. |
| put | Converte um número em uma sequência de CharTypes que representa o número formatado para uma determinada localidade. |
Requisitos
Cabeçalho:<locale>
Namespace: std
num_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 modeloCharType.
num_put::d o_put
Uma função virtual que é chamada para converter um número em uma sequência de CharTypes que representa o número formatado para uma determinada localidade.
virtual iter_type do_put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
bool val) const;
virtual iter_type do_put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
long val) const;
virtual iter_type do_put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
unsigned long val) const;
virtual iter_type do_put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
double val) const;
virtual iter_type do_put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
long double val) const;
virtual iter_type do_put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
const void* val) const;
virtual iter_type do_put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
const long long val) const;
virtual iter_type do_put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
const unsigned long long val) const;
Parâmetros
avançar
Um iterador que trata o primeiro elemento na cadeia de caracteres inserida.
_Iosbase
Foi especificado o fluxo que contém a localidade com a faceta numpunct usada para pontuar a saída e os sinalizadores para a formatação da saída.
_Encher
Um caractere que é usado para espaçamento.
Val
O número ou tipo booliano que será a saída.
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 inteiro com o valor de val. A função retorna um iterador designando o próximo local para inserir um elemento além do campo de saída inteiro gerado.
O campo de saída inteiro é gerado pelas mesmas regras usadas pelas funções de impressão para gerar uma série de elementos char para um arquivo. Cada elemento char é considerado mapeado para um elemento equivalente do tipo CharType por um mapeamento um para um simples. Quando uma função de impressão preenche um campo com espaços ou o dígito 0, no entanto, do_put usa fill. A especificação de conversão de impressão equivalente é determinada da seguinte forma:
Se iosbase. bandeiras &
ios_base::basefield==ios_base::oct, a especificação de conversão é .loSe iosbase.flags & ios_base::basefield ==
ios_base::hexadecimal, a especificação de conversão é .lxCaso contrário, a especificação de conversão é
ld.
Se iosbase. width é diferente de zero, uma largura de campo deste valor é anexado. Em seguida, a função chama iosbase. width(0) para redefinir a largura do campo como zero.
O preenchimento ocorre apenas se o número mínimo de elementos N necessários para especificar o campo de saída for menor que iosbase. largura. Esse preenchimento consiste em uma sequência de N - width cópias de fill. O preenchimento ocorre então da seguinte maneira:
Se iosbase. bandeiras e
ios_base::adjustfield==ios_base::à esquerda, a bandeira - é prefixada. (O preenchimento ocorre após o texto gerado.)Se iosbase.flags & ios_base::adjustfield ==
ios_base::internal, o sinalizador 0 será anexado. (Para um campo de saída numérico, o preenchimento ocorre quando as funções de impressão são preenchidas com 0.)Caso contrário, nenhum sinalizador adicional é anexado. (O preenchimento ocorre antes da sequência gerada.)
Por fim:
Se iosbase. flags &
ios_base::showpos é diferente de zero, o sinalizador + é anexado à especificação de conversão.Se iosbase. flags & ios_base::showbase é diferente de zero, o sinalizador # é anexado à especificação de conversão.
O formato de um campo de saída inteiro é determinado ainda pelo locale facetfac retornado pela chamada use_facet<numpunct<Elem>(iosbase.getloc). 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 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 no campo de saída. Caso contrário, os separadores são inseridos após a conversão de impressão.
A segunda função membro virtual protegida:
virtual iter_type do_put(iter_type next,
ios_base& _Iosbase,
CharType _Fill,
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.
A terceira função membro virtual protegida:
virtual iter_type do_put(iter_type next,
ios_base& _Iosbase,
CharType _Fill,
double val) const;
comporta-se da mesma maneira que a primeira, exceto que gera um campo de saída de ponto flutuante do valor de val. fac. decimal_point determina a sequência que separa os dígitos de inteiros dos dígitos de fração. A especificação de conversão de impressão equivalente é determinada da seguinte forma:
Se iosbase. bandeiras e
ios_base::floatfield==ios_base::fixo, a especificação de conversão é .lfSe iosbase. Bandeiras & ios_base::Floatfield ==
ios_base::Scientific, a especificação de conversão é .leSe iosbase. bandeiras eios_base::são diferentes de zero,eé substituído porE.Caso contrário, a especificação de conversão é Ig. Se iosbase. flags & ios_base::maiúsculas é diferente de zero,
gé substituído porG.
Se iosbase. flags & ios_base::fixed é diferente de zero ou se iosbase. precision é maior que zero, uma precisão com o valor iosbase. precision é anexado à especificação de conversão. O preenchimento comporta-se da mesma maneira que um campo de saída inteiro. O caractere de preenchimento é fill. Por fim:
Se iosbase. flags &
ios_base::showpos é diferente de zero, o sinalizador + é anexado à especificação de conversão.Se iosbase. flags &
ios_base::showpoint é diferente de zero, o sinalizador # é anexado à especificação de conversão.
A quarta função membro virtual protegida:
virtual iter_type do_put(iter_type next,
ios_base& _Iosbase,
CharType _Fill,
long double val) const;
se comporta como o terceiro, exceto que o qualificador l na especificação de conversão é substituído por L.
A quinta função membro virtual protegida:
virtual iter_type do_put(iter_type next,
ios_base& _Iosbase,
CharType _Fill,
const void* val) const;
se comporta como o primeiro, exceto que a especificação de conversão é p, mais qualquer qualificador necessário para especificar o preenchimento.
A sexta função membro virtual protegida:
virtual iter_type do_put(iter_type next,
ios_base& _Iosbase,
CharType _Fill,
bool val) const;
comporta-se da mesma maneira que a primeira, exceto que gera um campo de saída booliano de val.
Um campo de saída booliano adota um de dois formatos. Se iosbase.flags & ios_base::boolalpha for false, a função membro retornará do_put(_Next, _Iosbase, _Fill, (long)val), o que normalmente produz uma sequência gerada de 0 (para false) ou 1 (para true). Caso contrário, a sequência gerada será fac.falsename (para false), ou fac. truename (para true).
A sétima função membro virtual protegida:
virtual iter_type do_put(iter_type next,
ios_base& iosbase,
Elem fill,
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.
A oitava função membro virtual protegida:
virtual iter_type do_put(iter_type next,
ios_base& iosbase,
Elem fill,
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.
Exemplo
Consulte o exemplo de put, que chama do_put.
num_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.
num_put::num_put
O construtor para objetos do tipo num_put.
explicit num_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).
num_put::p ut
Converte um número em uma sequência de CharTypes que representa o número formatado para uma determinada localidade.
iter_type put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
bool val) const;
iter_type put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
long val) const;
iter_type put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
unsigned long val) const;
iter_type put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
Long long val) const;
iter_type put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
Unsigned long long val) const;
iter_type put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
double val) const;
iter_type put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
long double val) const;
iter_type put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
const void* val) const;
Parâmetros
dest
Um iterador que trata o primeiro elemento na cadeia de caracteres inserida.
_Iosbase
Foi especificado o fluxo que contém a localidade com a faceta numpunct usada para pontuar a saída e os sinalizadores para a formatação da saída.
_Encher
Um caractere que é usado para espaçamento.
Val
O número ou tipo booliano que será a saída.
Valor de retorno
Um iterador de saída que aborda uma posição além do último elemento produzido.
Comentários
Todas as funções membro retornam do_put(next, , _Iosbase, _Fill). val
Exemplo
// num_put_put.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <sstream>
using namespace std;
int main( )
{
locale loc( "german_germany" );
basic_stringstream<char> psz2;
ios_base::iostate st = 0;
long double fVal;
cout << "The thousands separator is: "
<< use_facet < numpunct <char> >(loc).thousands_sep( )
<< endl;
psz2.imbue( loc );
use_facet < num_put < char > >
( loc ).put(basic_ostream<char>::_Iter(psz2.rdbuf( ) ),
psz2, ' ', fVal=1000.67);
if ( st & ios_base::failbit )
cout << "num_put( ) FAILED" << endl;
else
cout << "num_put( ) = " << psz2.rdbuf( )->str( ) << endl;
}
The thousands separator is: .
num_put( ) = 1.000,67
Confira também
<localidade>
Classe facet
Acesso Thread-Safe na Biblioteca Padrão C++