std:: money_get
|
Definido en el encabezado
<locale>
|
||
|
template
<
class
CharT,
|
||
Plantilla de clase
std::money_get
encapsula las reglas para analizar valores monetarios desde flujos de caracteres. El manipulador de E/S estándar
std::get_money
utiliza el facet
std::money_get
de la configuración regional del flujo de E/S.
Diagrama de herencia
Si una especialización de
std::money_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 :: money_get < char > | analiza representaciones de cadena estrecha de valores monetarios |
| std :: money_get < wchar_t > | analiza representaciones de cadena ancha de valores monetarios |
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
|
string_type
|
std:: basic_string < 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
money_get
(función miembro pública) |
|
invoca
do_get
(función miembro pública) |
Funciones miembro protegidas
destruye una faceta
money_get
(función miembro protegida) |
|
|
[virtual]
|
analiza un valor monetario de un flujo de entrada
(función miembro virtual protegida) |
Ejemplo
#include <iomanip> #include <iostream> #include <iterator> #include <locale> #include <sstream> int main() { std::string str = "$1.11 $2.22 $3.33"; std::cout << std::fixed << std::setprecision(2); std::cout << '\"' << str << "\" parsed with the I/O manipulator: "; std::istringstream s1(str); s1.imbue(std::locale("en_US.UTF-8")); long double val; while (s1 >> std::get_money(val)) std::cout << val / 100 << ' '; std::cout << '\n'; str = "USD 1,234.56"; std::cout << '\"' << str << "\" parsed with the facet directly: "; std::istringstream s2(str); s2.imbue(std::locale("en_US.UTF-8")); auto& f = std::use_facet<std::money_get<char>>(s2.getloc()); std::ios_base::iostate err; std::istreambuf_iterator<char> beg(s2), end; f.get(beg, end, true, s2, err, val); std::cout << val / 100 << '\n'; }
Salida:
"$1.11 $2.22 $3.33" parsed with the I/O manipulator: 1.11 2.22 3.33 "USD 1,234.56" parsed with the facet directly: 1234.56
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 |
money_get
garantizaba aceptar cualquier
CharT
que
cumpla con los requisitos para un carácter en el cual cualquier componente de iostream pueda 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
money_get
|
puede garantizar aceptar tipos de contenedor
de carácter definidos por la implementación |
Véase también
|
define los parámetros de formato monetario utilizados por
std::money_get
y
std::money_put
(plantilla de clase) |
|
|
formatea un valor monetario para salida como secuencia de caracteres
(plantilla de clase) |
|
|
(C++11)
|
analiza un valor monetario
(plantilla de función) |