Namespaces
Variants

std:: money_get

From cppreference.net
Definido en el encabezado <locale>
template <

class CharT,
class InputIt = std:: istreambuf_iterator < CharT >

> class money_get ;

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.

cpp/locale/locale/facet std-money get-inheritance.svg

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:

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)