Classe num_put
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 CharType s que representa o número formatado para uma determinada localidade. |
put | Converte um número em uma sequência de CharType s 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 CharType
s 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.
_Fill
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 é .lo
Se iosbase.flags & ios_base::basefield ==
ios_base::
hexadecimal, a especificação de conversão é .lx
Caso 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. width. 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 é .lf
Se iosbase. Bandeiras & ios_base::Floatfield ==
ios_base::
Scientific, a especificação de conversão é .le
Se iosbase. bandeiras eios_base::
maiúsculas 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 CharType
s 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.
_Fill
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
<locale>
Classe facet
Acesso Thread-Safe na Biblioteca Padrão C++