std:: num_get
|
Definido en el encabezado
<locale>
|
||
|
template
<
class
CharT,
|
||
La clase
std::num_get
encapsula las reglas para analizar representaciones de cadenas de valores numéricos. Específicamente, los tipos
bool
,
unsigned
short
,
unsigned
int
,
long
,
unsigned
long
,
long
long
,
unsigned
long
long
(desde C++11)
,
float
,
double
,
long
double
, y
void
*
están soportados. Los operadores de entrada de formato estándar (como
cin
>>
n
;
) utilizan la faceta
std::num_get
de la configuración regional del flujo de E/S para analizar las representaciones textuales de los números.
Diagrama de herencia
Si una especialización de
std::num_get
no está garantizada que sea proporcionada por la biblioteca estándar (ver abajo), los comportamientos de sus funciones
get()
y
do_get()
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_get < char > | crea análisis de cadenas estrechas de números |
| std :: num_get < wchar_t > | crea análisis de cadenas anchas de números |
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
-
InputItdebe cumplir con los requisitos de LegacyInputIterator .
Tipos anidados
| Tipo | Definición |
char_type
|
CharT
|
iter_type
|
InputIt
|
Miembros de datos
| Miembro | Descripción |
std::locale::id
id
[static]
|
el identificador del facet |
Funciones miembro
construye un nuevo facet
num_get
(función miembro pública) |
|
invoca
do_get
(función miembro pública) |
Funciones miembro protegidas
destruye una faceta
num_get
(función miembro protegida) |
|
|
[virtual]
|
analiza un número desde un flujo de entrada
(función miembro virtual protegida) |
Ejemplo
#include <iostream> #include <iterator> #include <locale> #include <sstream> #include <string> int main() { std::string de_double = "1.234.567,89"; std::string us_double = "1,234,567.89"; // analizar usando streams std::istringstream de_in(de_double); de_in.imbue(std::locale("de_DE.UTF-8")); double f1; de_in >> f1; std::istringstream us_in(de_double); us_in.imbue(std::locale("en_US.UTF-8")); double f2; us_in >> f2; std::cout << "Parsing " << de_double << " as double gives " << std::fixed << f1 << " in de_DE locale and " << f2 << " in en_US\n"; // usar el facet directamente std::istringstream s3(us_double); s3.imbue(std::locale("en_US.UTF-8")); auto& f = std::use_facet<std::num_get<char>>(s3.getloc()); std::istreambuf_iterator<char> beg(s3), end; double f3; std::ios::iostate err; f.get(beg, end, s3, err, f3); std::cout << "parsing " << us_double << " as double using raw en_US facet gives " << f3 << '\n'; }
Salida:
Parsing 1.234.567,89 as double gives 1234567.890000 in de_DE locale and 1.234000 in en_US parsing 1,234,567.89 as double using raw en_US facet gives 1234567.890000
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 427 | C++98 |
num_get
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 carácter
CharT
podía
garantizarse ser aceptado por
num_get
|
puede garantizar aceptar tipos contenedores
de carácter definidos por la implementación |
Véase también
|
define las reglas de puntuación numérica
(plantilla de clase) |
|
|
formatea valores numéricos para salida como secuencia de caracteres
(plantilla de clase) |
|
|
extrae datos formateados
(función miembro pública de
std::basic_istream<CharT,Traits>
)
|