Compartir vía


num_put (Clase)

Una plantilla de clase que describe un objeto que puede actuar como una faceta de la configuración regional para controlar las conversiones de valores numéricos en secuencias de tipo CharType.

Sintaxis

template <class CharType,
    class OutputIterator = ostreambuf_iterator<CharType>>
class num_put : public locale::facet;

Parámetros

CharType
Tipo usado dentro de un programa para codificar los caracteres de una configuración regional.

OutputIterator
Tipo de iterador en el que las funciones numeric put escriben sus resultados.

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
num_put Constructor para los objetos de tipo num_put.

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 salida.

Funciones miembro

Función de miembro Descripción
do_put Función virtual a la que se llama a para convertir un número en una secuencia de CharType que representa el número con formato para una configuración regional especificada.
put Convierte un número en una secuencia de CharType que representa el número con formato para una configuración regional especificada.

Requisitos

Encabezado:<locale>

Espacio de nombres: std

num_put::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.

num_put::d_put

Función virtual a la que se llama a para convertir un número en una secuencia de CharType que representa el número con formato para una configuración regional especificada.

virtual iter_type do_put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    bool val) const;

virtual iter_type do_put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    long val) const;

virtual iter_type do_put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    unsigned long val) const;

virtual iter_type do_put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    double val) const;

virtual iter_type do_put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    long double val) const;

virtual iter_type do_put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    const void* val) const;

virtual iter_type do_put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    const long long val) const;

virtual iter_type do_put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    const unsigned long long val) const;

Parámetros

siguiente
Un iterador que se dirige al primer elemento de la cadena insertada.

_Iosbase
Ha especificado la secuencia que contiene la configuración regional con la faceta numpunct usada para puntuar la salida y marcas para aplicar formato a la salida.

_Fill
Un carácter que se usa para el espaciado.

val
El número o tipo booleano del que se va a obtener la salida.

Valor devuelto

Un iterador de salida que se dirige a la posición siguiente del último elemento que se ha producido.

Comentarios

La primera función miembro virtual protegida genera elementos secuenciales que comienzan por next para producir un campo de salida numérico entero del valor de val. La función devuelve un iterador que designa el lugar siguiente para insertar un elemento más allá del campo de salida numérico entero que se ha generado.

El campo de salida numérico entero se genera mediante las mismas reglas que han usado las funciones de impresión para generar una serie de elementos char para un archivo. Se supone que cada uno de estos elementos char se asigna a un elemento equivalente de tipo CharType mediante una asignación simple, uno a uno. Donde una función de impresión rellena un campo con espacios o con el dígito 0, pero, en su lugar, do_put usa fill. La especificación de conversión de impresión equivalente se determina de la manera siguiente:

  • Si iosbase. flags & ios_base::basefield == ios_base::oct, la especificación de conversión es .lo

  • Si iosbase.flags & ios_base::basefield hexadecimalios_base:: == , la especificación de conversión es .lx

  • De otro modo, la especificación de conversión es ld.

Si iosbase. width es distinto de cero, se antepone un ancho de campo de este valor. Entonces, la función llama a iosbase. width(0) para restablecer el ancho de campo a cero.

El relleno solo se produce si el número mínimo de elementos N necesarios para especificar el campo de salida es inferior a iosbase. width. Dicho relleno consta de una secuencia de N - width copias de fill. Después, el relleno se produce de la manera siguiente:

  • Si iosbase. flags & ios_base::adjustfield == ios_base::left, la marca - está antepuesto. (El relleno se produce después del texto generado).

  • Si iosbase.flags & ios_base::adjustfieldios_base:: == interno, se antepone la marca 0. (Para un campo de salida numérico, el relleno se produce donde las funciones de impresión rellenan con 0).

  • De otro modo, no se antepone ninguna marca adicional. (El relleno se produce antes de la secuencia generada).

Por último:

  • Si iosbase. flags & ios_base::showpos es distinto de cero, la marca + se antepone a la especificación de conversión.

  • Si iosbase. flags & ios_base::showbase es distinto de cero, la marca # se antepone a la especificación de conversión.

El formato de un campo de salida numérico entero se determina por la faceta de configuración regionalfac que se devuelve mediante la llamada a use_facet<numpunct<Elem> (iosbase. getloc). Específicamente:

  • fac. grouping determina cómo se agrupan los dígitos a la izquierda de cualquier separador decimal

  • fac. thousands_sep determina la secuencia que separa grupos de dígitos a la izquierda de cualquier separador decimal

Si no se impone ninguna restricción de agrupación mediante fac. grouping (su primer elemento tiene el valor CHAR_MAX), entonces ninguna instancia de fac. thousands_sep se generan en el campo de salida. De otro modo, los separadores se insertan después de que se produzca la conversión de impresión.

La segunda función miembro virtual protegida:

virtual iter_type do_put(iter_type next,
    ios_base& _Iosbase,
    CharType _Fill,
    unsigned long val) const;

se comporta igual que la primera, excepto que reemplaza una especificación de conversión de ld por lu.

La tercera función miembro virtual protegida:

virtual iter_type do_put(iter_type next,
    ios_base& _Iosbase,
    CharType _Fill,
    double val) const;

se comporta igual que la primera, excepto que produce un campo de salida de punto flotante del valor de val. fac. decimal_point determina la secuencia que separa los dígitos enteros de los dígitos de fracción. La especificación de conversión de impresión equivalente se determina de la manera siguiente:

  • Si iosbase. flags & ios_base::floatfield == ios_base::fixed, la especificación de conversión es .lf

  • Si iosbase. flags & ios_base::floatfieldios_base:: == scientific, la especificación de conversión es .le Si iosbase. flags & ios_base::uppercase es distinto de cero, e se reemplaza por E.

  • De otro modo, la especificación de conversión es lg. Si iosbase. flags & ios_base::uppercase is nonzero, g is replaced with G.

Si iosbase. flags & ios_base::fixed es distinto de cero o si iosbase. precision es mayor que cero, una precisión con el valor iosbase. precision se antepone a la especificación de conversión. Cualquier relleno se comporta de la misma manera que para un campo de salida numérico entero. El carácter de relleno es fill. Por último:

  • Si iosbase. flags & ios_base::showpos es distinto de cero, la marca + se antepone a la especificación de conversión.

  • Si iosbase. flags & ios_base::showpoint es distinto de cero, la marca # se antepone a la especificación de conversión.

La cuarta función miembro virtual protegida:

virtual iter_type do_put(iter_type next,
    ios_base& _Iosbase,
    CharType _Fill,
    long double val) const;

se comporta igual que la tercera, excepto que el calificador l en la especificación de conversión se reemplaza por L.

La quinta función miembro virtual protegida:

virtual iter_type do_put(iter_type next,
    ios_base& _Iosbase,
    CharType _Fill,
    const void* val) const;

se comporta igual que la primera, excepto que la especificación de conversión es p, además de cualquier calificador necesario para especificar el relleno.

La sexta función miembro virtual protegida:

virtual iter_type do_put(iter_type next,
    ios_base& _Iosbase,
    CharType _Fill,
    bool val) const;

se comporta igual que la primera, excepto que genera un campo de salida booleano de val.

Un campo de salida booleano adopta una de dos formas. Si iosbase.flags & ios_base::boolalpha es false, la función miembro devuelve do_put(_Next, _Iosbase, _Fill, (long)val), que normalmente genera una secuencia generada de 0 (para false) o 1 (para true). De lo contrario, la secuencia generada es fac. falsename (para false) o fac. truename (para true).

La séptima función miembro virtual protegida:

virtual iter_type do_put(iter_type next,
    ios_base& iosbase,
    Elem fill,
    long long val) const;

se comporta igual que la primera, excepto que reemplaza una especificación de conversión de ld por lld.

La octava función miembro virtual protegida:

virtual iter_type do_put(iter_type next,
    ios_base& iosbase,
    Elem fill,
    unsigned long long val) const;

se comporta igual que la primera, excepto que reemplaza una especificación de conversión de ld por llu.

Ejemplo

Vea el ejemplo de put, que llama a do_put.

num_put::iter_type

Tipo que describe un iterador de salida.

typedef OutputIterator iter_type;

Comentarios

El tipo es un sinónimo del parámetro de plantilla OutputIterator.

num_put::num_put

Constructor para los objetos de tipo num_put.

explicit num_put(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).

num_put::p ut

Convierte un número en una secuencia de CharType, que representa el número con formato para una configuración regional especificada.

iter_type put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    bool val) const;

iter_type put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    long val) const;

iter_type put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    unsigned long val) const;

iter_type put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    Long long val) const;

iter_type put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    Unsigned long long val) const;

iter_type put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    double val) const;

iter_type put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    long double val) const;

iter_type put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    const void* val) const;

Parámetros

dest
Un iterador que se dirige al primer elemento de la cadena insertada.

_Iosbase
Ha especificado la secuencia que contiene la configuración regional con la faceta numpunct usada para puntuar la salida y marcas para aplicar formato a la salida.

_Fill
Un carácter que se usa para el espaciado.

val
El número o tipo booleano del que se va a obtener la salida.

Valor devuelto

Un iterador de salida que se dirige a la posición siguiente del último elemento que se ha producido.

Comentarios

Todas las funciones miembro devuelven do_put( next, _Iosbase, _Fill, val).

Ejemplo

// num_put_put.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <sstream>
using namespace std;
int main( )
{
   locale loc( "german_germany" );
   basic_stringstream<char> psz2;
   ios_base::iostate st = 0;
   long double fVal;
   cout << "The thousands separator is: "
        << use_facet < numpunct <char> >(loc).thousands_sep( )
        << endl;

   psz2.imbue( loc );
   use_facet < num_put < char > >
      ( loc ).put(basic_ostream<char>::_Iter(psz2.rdbuf( ) ),
                    psz2, ' ', fVal=1000.67);

   if ( st & ios_base::failbit )
      cout << "num_put( ) FAILED" << endl;
   else
      cout << "num_put( ) = " << psz2.rdbuf( )->str( ) << endl;
}
The thousands separator is: .
num_put( ) = 1.000,67

Consulte también

<locale>
facet (Clase)
Seguridad para subprocesos en la biblioteca estándar de C++