Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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 dentro de um programa para codificar caracteres em uma localidade.
OutputIterator
O tipo de iterador ao qual as funções numéricas put gravam sua saída.
Observações
Como em qualquer faceta de localidade, o ID do objeto estático tem um valor inicial armazenado de zero. A primeira tentativa de acessar seu valor armazenado armazena um valor positivo exclusivo em id.
Construtores
| Construtor | Descrição |
|---|---|
| num_put | O construtor para objetos do tipo num_put. |
Typedefs (definições de tipos)
| 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 s que representa o número formatado CharTypepara uma determinada localidade. |
| colocar | Converte um número em uma sequência de s que representa o número formatado CharTypepara uma determinada localidade. |
Requerimentos
Cabeçalho:<localidade>
Espaço de nomes: std
num_put::char_type
Um tipo que é usado para descrever um caractere usado por uma localidade.
typedef CharType char_type;
Observações
O tipo é um sinônimo para o parâmetro de modelo CharType.
num_put::d o_put
Uma função virtual que é chamada para converter um número em uma sequência de s que representa o número formatado CharTypepara 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
seguinte
Um iterador endereçando o primeiro elemento da cadeia de caracteres inserida.
_Iosbase
Especificado o fluxo que contém localidade com a faceta numpunct usada para pontuar a saída e sinalizadores para formatar a saída.
_Fill
Um caractere que é usado para espaçamento.
Val
O número ou tipo booleano que deve ser produzido.
Valor de retorno
Um iterador de saída aborda a posição um além do último elemento produzido.
Observações
A primeira função de membro virtual protegido gera elementos sequenciais começando em seguida para produzir um campo de saída inteiro a partir do 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 char elementos para um arquivo. Cada elemento char é assumido para mapear para um elemento equivalente do tipo CharType por um simples mapeamento um-para-um. No entanto, quando uma função de impressão preenche um campo com espaços ou o dígito 0, do_put em vez disso usa fill. A especificação de conversão de impressão equivalente é determinada da seguinte forma:
Se iosbase. sinalizadores &
ios_base::basefield==ios_base::oct, a especificação de conversão élo.Se iosbase.flags & ios_base::basefield ==
ios_base::hex, 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 é prependida. A função então chama iosbase. width(0) para redefinir a largura do campo para zero.
O preenchimento ocorre somente se o número mínimo de elementos N necessário para especificar o campo de saída for menor que iosbase. largura. Esse preenchimento consiste em uma sequência de cópias depreenchimento com largura - . O preenchimento ocorre da seguinte forma:
Se iosbase. bandeiras ou
ios_base::adjustfield==ios_base::esquerda, a bandeira - é prepended. (O preenchimento ocorre após o texto gerado.)Se iosbase.flags & ios_base::adjustfield ==
ios_base::internal, o sinalizador 0 será prepended. (Para um campo de saída numérico, o preenchimento ocorre onde o painel de funções de impressão com 0.)Caso contrário, nenhum sinalizador adicional será prependido. (O preenchimento ocorre antes da sequência gerada.)
Por fim:
Se iosbase. flags &
ios_base::showpos é diferente de zero, o sinalizador + é prepended para a especificação de conversão.Se iosbase. flags & ios_base::showbase é diferente de zero, o sinalizador # é prepended para a especificação de conversão.
O formato de um campo de saída inteiro é ainda determinado pela faceta de localidadefac retornada pela chamada use_facet<numpunct<Elem>( iosbase. getloc). Mais especificamente:
FAC. O agrupamento determina como os dígitos são agrupados à esquerda de qualquer ponto decimal
FAC. thousands_sep determina a sequência que separa grupos de dígitos à esquerda de qualquer ponto decimal
Se nenhuma restrição de agrupamento for imposta pelo fac.
Agrupamento (seu primeiro elemento tem o valor CHAR_MAX), em seguida, nenhuma instância 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 de membro virtual protegido:
virtual iter_type do_put(iter_type next,
ios_base& _Iosbase,
CharType _Fill,
unsigned long val) const;
comporta-se da mesma forma que o primeiro, exceto que substitui uma especificação de conversão de ld com lu.
A terceira função de membro virtual protegido:
virtual iter_type do_put(iter_type next,
ios_base& _Iosbase,
CharType _Fill,
double val) const;
se comporta da mesma forma que o primeiro, exceto que produz um campo de saída de ponto flutuante a partir do valor de val. FAC. decimal_point determina a sequência que separa os dígitos inteiros dos dígitos da fração. A especificação de conversão de impressão equivalente é determinada da seguinte forma:
Se iosbase. sinalizadores &
ios_base::floatfield==ios_base::fixos, a especificação de conversão élf.Se iosbase. flags & ios_base::floatfield ==
ios_base::científico, a especificação de conversão éle. Se iosbase. flags &ios_base::maiúsculas é diferente de zero,eé substituído porE.Caso contrário, a especificação de conversão é lg. 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. A precisão é maior que zero, uma precisão com o valor iosbase. a precisão é precedida da especificação de conversão. Qualquer preenchimento se comporta da mesma forma que para um campo de saída inteiro. O caractere de preenchimento é preenchimento. Por fim:
Se iosbase. flags &
ios_base::showpos é diferente de zero, o sinalizador + é prepended para a especificação de conversão.Se iosbase. flags &
ios_base::showpoint é diferente de zero, o sinalizador # é prepended para a especificação de conversão.
A quarta função de membro virtual protegido:
virtual iter_type do_put(iter_type next,
ios_base& _Iosbase,
CharType _Fill,
long double val) const;
se comporta da mesma forma no terceiro, exceto que o qualificador l na especificação de conversão é substituído por L.
A quinta função de membro virtual protegido:
virtual iter_type do_put(iter_type next,
ios_base& _Iosbase,
CharType _Fill,
const void* val) const;
se comporta da mesma forma no primeiro, exceto que a especificação de conversão é p, mais qualquer qualificador necessário para especificar o preenchimento.
A sexta função de membro virtual protegido:
virtual iter_type do_put(iter_type next,
ios_base& _Iosbase,
CharType _Fill,
bool val) const;
comporta-se da mesma forma que o primeiro, exceto que gera um campo de saída booleano a partir de val.
Um campo de saída booleano assume uma de duas formas. Se iosbase.flags & ios_base::boolalpha for false, a função de membro retorna do_put(_Next, _Iosbase, _Fill, (long)val), que normalmente produz uma sequência gerada de 0 (para false) ou 1 (para true). Caso contrário, a sequência gerada é fac. nome falso (para false), ou fac.truename (para true).
A sétima função de membro virtual protegido:
virtual iter_type do_put(iter_type next,
ios_base& iosbase,
Elem fill,
long long val) const;
comporta-se da mesma forma que o primeiro, exceto que substitui uma especificação de conversão de ld com lld.
A oitava função de membro virtual protegido:
virtual iter_type do_put(iter_type next,
ios_base& iosbase,
Elem fill,
unsigned long long val) const;
comporta-se da mesma forma que o primeiro, exceto que substitui uma especificação de conversão de ld com llu.
Exemplo
Veja o exemplo para put, que chama do_put.
num_put::iter_type
Um tipo que descreve um iterador de saída.
typedef OutputIterator iter_type;
Observações
O tipo é um sinônimo para o 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 para o objeto.
Observações
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: Estes valores não estão definidos.
Não são possíveis exemplos diretos, porque 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 s que representa o número formatado CharTypepara 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 endereçando o primeiro elemento da cadeia de caracteres inserida.
_Iosbase
Especificado o fluxo que contém a localidade com a faceta numpunct usada para pontuar a saída e sinalizadores para formatar a saída.
_Fill
Um caractere que é usado para espaçamento.
Val
O número ou tipo booleano que deve ser produzido.
Valor de retorno
Um iterador de saída aborda a posição um além do último elemento produzido.
Observações
Todas as funções de membro retornam do_put(next, _Iosbase, _Fillval, ).
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
Ver também
<localidade>
faceta Classe
segurança de threads na biblioteca padrão C++