std:: num_put
|
Definido en el encabezado
<locale>
|
||
|
template
<
class
CharT,
|
||
La clase
std::num_put
encapsula las reglas para formatear valores numéricos como cadenas. Específicamente, los tipos
bool
,
long
,
unsigned
long
,
long
long
,
unsigned
long
long
(desde C++11)
,
double
,
long
double
,
void
*
, y todos los tipos convertibles implícitamente a estos (como
int
o
float
) están soportados. Los operadores estándar de salida con formato (como
cout
<<
n
;
) utilizan la faceta
std::num_put
de la configuración regional del flujo de E/S para generar la representación textual de los números.
Diagrama de herencia
Si una especialización de
std::num_put
no está garantizada que sea proporcionada por la biblioteca estándar (ver abajo), los comportamientos de sus funciones
put()
y
do_put()
no están garantizados como se especifica.
Contenidos |
Especializaciones
La biblioteca estándar garantiza proporcionar las siguientes especializaciones (están requeridas para ser implementadas por cualquier objeto locale ):
|
Definido en el encabezado
<locale>
|
|
| std :: num_put < char > | crea representaciones de números en cadenas estrechas |
| std :: num_put < wchar_t > | crea representaciones de números en cadenas anchas |
Además, la biblioteca estándar también garantiza proporcionar cada especialización que cumpla con los siguientes requisitos de tipo:
-
CharTes uno de- char ,
- wchar_t , y
- cualquier otro tipo de contenedor de caracteres definido por la implementación que cumpla con los requisitos para un carácter sobre el cual cualquiera de los componentes de iostream pueda instanciarse; y
-
OutputItdebe cumplir con los requisitos de LegacyOutputIterator .
Tipos anidados
| Tipo | Definición |
char_type
|
CharT
|
iter_type
|
OutputIt
|
Miembros de datos
| Miembro | Descripción |
std::locale::id
id
[static]
|
el identificador del facet |
Funciones miembro
construye un nuevo facet
num_put
(función miembro pública) |
|
invoca
do_put
(función miembro pública) |
Funciones miembro protegidas
destruye una faceta
num_put
(función miembro protegida) |
|
|
[virtual]
|
formatea un número y escribe en el flujo de salida
(función miembro virtual protegida) |
Ejemplo
#include <iostream> #include <iterator> #include <locale> #include <string> int main() { double n = 1234567.89; std::cout.imbue(std::locale("de_DE.UTF-8")); std::cout << "Conversión directa a string:\n" << std::to_string(n) << '\n' << "Salida usando una configuración regional alemana:\n" << std::fixed << n << '\n' << "Salida usando una configuración regional americana:\n"; // usar el facet directamente std::cout.imbue(std::locale("en_US.UTF-8")); auto& f = std::use_facet<std::num_put<char>>(std::cout.getloc()); f.put(std::ostreambuf_iterator<char>(std::cout), std::cout, ' ', n); std::cout << '\n'; }
Salida posible:
Conversión directa a string: 1234567.890000 Salida usando una configuración regional alemana: 1.234.567,890000 Salida usando una configuración regional americana: 1,234,567.890000
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.
| DR | Se aplica a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 427 | C++98 |
num_put
garantizaba aceptar cualquier
CharT
que
cumpliese los requisitos para un carácter sobre el cual cualquier componente de iostream pudiera instanciarse |
solo garantiza aceptar
char
,
wchar_t y otros tipos de carácter definidos por la implementación |
| LWG 2392 | C++98 |
solo el tipo de carácter
CharT
podía
garantizarse ser aceptado por
num_put
|
puede garantizar aceptar tipos de contenedor
de caracteres definidos por la implementación |
Véase también
|
define las reglas de puntuación numérica
(plantilla de clase) |
|
|
analiza valores numéricos de una secuencia de caracteres de entrada
(plantilla de clase) |
|
|
(C++11)
|
convierte un valor entero o de punto flotante a
string
(función) |
|
(C++11)
|
convierte un valor entero o de punto flotante a
wstring
(función) |