money_get (Clase)
La clase de plantilla describe un objeto que puede actuar como una faceta de configuración regional para controlar las conversiones de secuencias de tipo CharType
en valores monetarios.
Sintaxis
template <class CharType, class InputIterator = istreambuf_iterator<CharType>>
class money_get : public locale::facet;
Parámetros
CharType
Tipo usado dentro de un programa para codificar los caracteres de una configuración regional.
InputIterator
Tipo de iterador del que las funciones get leen su entrada.
Comentarios
Como ocurre con cualquier faceta de configuración regional, el identificador de objeto estático tiene un valor almacenado inicial de cero. El primer intento de acceso a su valor almacenado almacena un valor positivo único en id.
Constructores
Constructor | Descripción |
---|---|
money_get | Constructor de objetos de tipo money_get que se usan para extraer valores numéricos de secuencias que representan valores monetarios. |
Typedefs
Nombre de tipo | Descripción |
---|---|
char_type | Tipo que se usa para describir un carácter empleado por una configuración regional. |
iter_type | Tipo que describe un iterador de entrada. |
string_type | Tipo que describe una cadena que contiene caracteres de tipo CharType . |
Funciones miembro
Función de miembro | Descripción |
---|---|
do_get | Función virtual a la que se llama para extraer un valor numérico de una secuencia de caracteres que representa un valor monetario. |
get | Extrae un valor numérico de una secuencia de caracteres que representa un valor monetario. |
Requisitos
Encabezado:<locale>
Espacio de nombres: std
money_get::char_type
Tipo que se usa para describir un carácter empleado por una configuración regional.
typedef CharType char_type;
Comentarios
El tipo es un sinónimo del parámetro de plantilla CharType.
money_get::d o_get
Función virtual a la que se llama para extraer un valor numérico de una secuencia de caracteres que representa un valor monetario.
virtual iter_type do_get(iter_type first,
iter_type last,
bool Intl,
ios_base& Iosbase,
ios_base::iostate& State,
long double& val) const virtual iter_type do_get(iter_type first,
iter_type last,
bool Intl,
ios_base& Iosbase,
ios_base::iostate& State,
string_type& val) const
Parámetros
first
Iterador de entrada que se dirige al principio de la secuencia que se va a convertir.
last
Iterador de entrada que se dirige al final de la secuencia que se va a convertir.
Intl
Un valor booleano que indica el tipo de símbolo de moneda que se espera en la secuencia: true
si es internacional, false
si es nacional.
Iosbase
Un formato de marca que cuando está establecido indica que el símbolo de moneda es opcional. De lo contrario, es obligatorio.
State
Establece los elementos de máscara de bits apropiados para el estado de la secuencia en función de si las operaciones se realizaron correctamente o no.
val
Una cadena que almacena la secuencia convertida.
Valor devuelto
Un iterador de entrada que se dirige al primer elemento más allá del campo de entrada monetario.
Comentarios
La primera función miembro virtual protegida intenta hacer coincidir los elementos secuenciales, empezando al principio de la secuencia [ first
, last
) hasta que reconoce un campo de entrada monetario completo y que no esté vacío. Si se realiza correctamente, convierte este campo en una secuencia de uno o más dígitos decimales, opcionalmente precedido por un signo menos (-
), para representar la cantidad y almacena el resultado en el objeto string_type val. Devuelve un iterador que designa el primer elemento más allá del campo de entrada monetario. De otro modo, la función almacena una secuencia vacía en val y establece ios_base::failbit
en State. Devuelve un iterador que designa el primer elemento más allá de cualquier prefijo de campo de entrada monetario válido. En cualquier caso, si el valor devuelto es igual a last
, la función establece ios_base::eofbit
en State
.
La segunda función miembro virtual protegida se comporta de la misma manera que la primera, a excepción de que, si se realiza correctamente, convierte la secuencia de dígitos con signo opcional en un valor de tipo long double
y almacena ese valor en val.
El formato de un campo de entrada monetario se determina por la faceta de configuración regionalfac devuelta mediante la llamada eficaz a use_facet<moneypunct<CharType, intl>> (iosbase. getloc).
Específicamente:
fac. neg_format determina el orden en el que aparecen los componentes del campo.
fac. curr_symbol determina la secuencia de elementos que constituye un símbolo de moneda.
fac. positive_sign determina la secuencia de elementos que constituye un signo positivo.
fac. negative_sign determina la secuencia de elementos que constituye un signo negativo.
fac. grouping determina cómo se agrupan los dígitos a la izquierda de cualquier separador decimal.
fac. thousands_sep determina el elemento que separa grupos de dígitos a la izquierda de cualquier separador decimal.
fac. decimal_point determina el elemento que separa los dígitos enteros de los dígitos de fracción.
fac. frac_digits determina el número de dígitos de fracción significativos a la derecha de cualquier separador decimal. Al analizar una cantidad monetaria con más dígitos de fracción que a los que se llama mediante
frac_digits
,do_get
detiene el análisis después de consumirfrac_digits
caracteres como máximo.
Si el símbolo cadena (fac. negative_sign
o fac. positive_sign
) tiene más de un elemento, solo coincide con el primer elemento donde el elemento igual a money_base::sign aparece en el patrón de formato ( fac. neg_format
). Coincide con cualquier elemento restante al final del campo de entrada monetario. Si ninguna cadena tiene un primer elemento que coincide con el siguiente elemento del campo de entrada monetario, la cadena de signo se toma como vacía y el signo es positivo.
Si iosbase. flags & showbase es distinto de cero, la cadena fac. curr_symbol
debe coincidir donde el elemento igual a money_base::symbol aparece en el patrón de formato. De otro modo, si money_base::symbol se produce al final del patrón de formato y, si ningún elemento de la cadena de signo debe coincidir, no coincide con el símbolo de moneda. De otro modo, coincide con el símbolo de moneda de manera opcional.
Si ninguna instancia de fac. thousands_sep
se produce en la parte de valor del campo de entrada monetario (donde el elemento igual a money_base::value aparece en el patrón de formato), no se impone ninguna restricción de agrupación. De otro modo, cualquier restricción de agrupación impuesta por fac. grouping se aplica. Tenga en cuenta que la secuencia de dígitos resultante representa un entero cuyos dígitos decimales fac. frac_digits
de nivel bajo se colocan a la derecha del separador decimal.
Coincide con el espacio en blanco arbitrario donde el elemento igual a money_base::space aparece en el patrón de formato, si aparece en otro lugar diferente que al final del patrón de formato. De otro modo, no coincide con ningún espacio en blanco interno. Un elemento ch se considera un espacio en blanco si use_facet<ctype<CharType>> (iosbase. getloc). is( ctype_base::space, ch) es true
.
Ejemplo
Vea el ejemplo de get, que llama a do_get
.
money_get::get
Extrae un valor numérico de una secuencia de caracteres que representa un valor monetario.
iter_type get(iter_type first,
iter_type last,
bool Intl,
ios_base& Iosbase,
ios_base::iostate& State,
long double& val) const;
iter_type get(iter_type first,
iter_type last,
bool Intl,
ios_base& Iosbase,
ios_base::iostate& State,
string_type& val) const;
Parámetros
first
Iterador de entrada que se dirige al principio de la secuencia que se va a convertir.
last
Iterador de entrada que se dirige al final de la secuencia que se va a convertir.
Intl
Un valor booleano que indica el tipo de símbolo de moneda que se espera en la secuencia: true
si es internacional, false
si es nacional.
Iosbase
Un formato de marca que cuando está establecido indica que el símbolo de moneda es opcional. De lo contrario, es obligatorio.
State
Establece los elementos de máscara de bits apropiados para el estado de la secuencia en función de si las operaciones se realizaron correctamente.
val
Una cadena que almacena la secuencia convertida.
Valor devuelto
Un iterador de entrada que se dirige al primer elemento más allá del campo de entrada monetario.
Comentarios
Ambas funciones miembro devuelven do_get(first, last, Intl, Iosbase, State, val)
.
Ejemplo
// money_get_get.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <sstream>
using namespace std;
int main( )
{
locale loc( "german_germany" );
basic_stringstream< char > psz;
psz << use_facet<moneypunct<char, 1> >(loc).curr_symbol() << "-1.000,56";
basic_stringstream< char > psz2;
psz2 << "-100056" << use_facet<moneypunct<char, 1> >(loc).curr_symbol();
ios_base::iostate st = 0;
long double fVal;
psz.flags( psz.flags( )|ios_base::showbase );
// Which forced the READING the currency symbol
psz.imbue(loc);
use_facet < money_get < char > >( loc ).
get( basic_istream<char>::_Iter( psz.rdbuf( ) ),
basic_istream<char>::_Iter( 0 ), true, psz, st, fVal );
if ( st & ios_base::failbit )
cout << "money_get(" << psz.str( ) << ", intl = 1) FAILED"
<< endl;
else
cout << "money_get(" << psz.str( ) << ", intl = 1) = "
<< fVal/100.0 << endl;
use_facet < money_get < char > >( loc ).
get(basic_istream<char>::_Iter(psz2.rdbuf( )),
basic_istream<char>::_Iter(0), false, psz2, st, fVal);
if ( st & ios_base::failbit )
cout << "money_get(" << psz2.str( ) << ", intl = 0) FAILED"
<< endl;
else
cout << "money_get(" << psz2.str( ) << ", intl = 0) = "
<< fVal/100.0 << endl;
};
money_get::iter_type
Tipo que describe un iterador de entrada.
typedef InputIterator iter_type;
Comentarios
El tipo es un sinónimo del parámetro de plantilla InputIterator.
money_get::money_get
Constructor de objetos de tipo money_get
que se usan para extraer valores numéricos de secuencias que representan valores monetarios.
explicit money_get(size_t _Refs = 0);
Parámetros
_Refs
Valor entero que se usa para especificar el tipo de administración de memoria del objeto.
Comentarios
Los valores posibles del parámetro _Refs y su importancia son:
0: la vigencia del objeto se administra mediante las configuraciones regionales que lo contienen.
1: la vigencia del objeto se debe administrar de manera manual.
> 1: estos valores no están definidos.
No es posible mostrar ejemplos directos, porque el destructor está protegido.
El constructor inicializa su objeto base con locale::facet(_Refs).
money_get::string_type
Un tipo que describe una cadena que contiene caracteres de tipo CharType.
typedef basic_string<CharType, Traits, Allocator> string_type;
Comentarios
El tipo describe una especialización de la plantilla clase basic_string.
Consulte también
<locale>
facet (Clase)
Seguridad para subprocesos en la biblioteca estándar de C++