Partager via


num_put, classe

Modèle de classe qui décrit un objet qui peut servir de facette de paramètres régionaux pour contrôler les conversions de valeurs numériques en séquences de type CharType.

Syntaxe

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

Paramètres

CharType
Type utilisé dans un programme pour encoder des caractères dans des paramètres régionaux spécifiques.

OutputIterator
Type d'itérateur dans lequel les fonctions numériques Put écrivent leur sortie.

Notes

Comme avec n'importe quelle facette de paramètres régionaux, l'ID d'objet statique possède une valeur stockée initiale de zéro. La première tentative d’accès à sa valeur stockée entraîne le stockage d’une valeur positive unique dans id.

Constructeurs

Constructeur Description
num_put Constructeur des objets de type num_put.

Typedefs

Nom de type Description
char_type Type utilisé pour décrire un caractère utilisé par des paramètres régionaux.
iter_type Type qui décrit un itérateur de sortie.

Fonctions Membre

Fonction membre Description
do_put Fonction virtuelle qui est appelée pour convertir un nombre en une séquence de CharType qui représente le nombre au format de paramètres régionaux donnés.
put Convertit un nombre en une séquence de CharType qui représente le nombre au format de paramètres régionaux donnés.

Spécifications

Header :<locale>

Espace de noms : std

num_put ::char_type

Type utilisé pour décrire un caractère utilisé par des paramètres régionaux.

typedef CharType char_type;

Notes

Le type est un synonyme du paramètre de modèle CharType.

num_put ::d o_put

Fonction virtuelle qui est appelée pour convertir un nombre en une séquence de CharType qui représente le nombre au format de paramètres régionaux donnés.

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;

Paramètres

suivant
Itérateur qui traite le premier élément de la chaîne insérée.

_Iosbase
Spécifie le flux qui contient des paramètres régionaux avec la facette numpunct utilisée pour les signes de ponctuation de la sortie et des indicateurs pour la mise en forme de la sortie.

_Remplir
Caractère utilisé pour l’espacement.

val
Nombre ou type booléen à envoyer en sortie.

Valeur de retour

Itérateur de sortie qui traite la position située juste au-delà du dernier élément produit.

Notes

La première fonction membre protégée virtuelle génère des éléments séquentiels commençant à côté pour produire un champ de sortie entier à partir de la valeur de val. La fonction retourne un itérateur désignant l’emplacement suivant où insérer un élément au-delà du champ de sortie d’entier généré.

Le champ de sortie d’entier est généré par les mêmes règles que celles utilisées par les fonctions d’impression pour la génération d’une série d’éléments char dans un fichier. Chaque élément char de ce type est supposé mapper à un élément de type CharType équivalent par un mappage simple et un-à-un. Lorsqu’une fonction d’impression padse un champ avec des espaces ou le chiffre 0, cependant, do_put utilise fillà la place . La spécification de conversion d’impression équivalente est déterminée comme suit :

  • Si iosbase. indicateurs &ios_base:: == ios_base::basefieldoct, la spécification de conversion est .lo

  • Si iosbase.flags &ios_base ::basefieldios_base:: == hex, la spécification de conversion est .lx

  • Autrement, la spécification de conversion est ld.

Si iosbase. width est différent de zéro, une largeur de champ de cette valeur est ajoutée. La fonction appelle ensuite iosbase. width(0) pour réinitialiser la largeur du champ à la valeur zéro.

Le remplissage se produit uniquement si le nombre minimal d’éléments N exigé pour spécifier le champ de sortie est inférieur à iosbase. width. Ce remplissage se compose d’une séquence de copies de largeur N - de remplissage. Le remplissage se produit ensuite comme suit :

  • Si iosbase. indicateurs &ios_base:: == ios_base::adjustfield à gauche, l’indicateur - est prédéfini. (Le remplissage se produit après le texte généré.)

  • Si iosbase.flags &ios_base ::adjustfieldios_base:: == interne, l’indicateur 0 est précédé. (Pour un champ de sortie numérique, le remplissage se produit là où les fonctions d’impression remplissent avec 0.)

  • Autrement, aucun indicateur supplémentaire n’est ajouté. (Le remplissage se produit avant la séquence générée.)

Pour finir :

  • Si iosbase. flags & ios_base::showpos est différent de zéro, l’indicateur + est ajouté à la spécification de conversion.

  • Si iosbase. flags & ios_base ::showbase est différent de zéro, l’indicateur # est précédé de la spécification de conversion.

Le format d’un champ de sortie entier est déterminé par la facette locale retournée par l’appel use_facet<numpunct<Elem>( iosbase). getloc). Plus précisément :

  • fac. grouping détermine comment les chiffres sont regroupés à gauche de la virgule décimale.

  • fac. thousands_sep détermine la séquence qui sépare les groupes de chiffres à gauche de la virgule décimale.

Si aucune contrainte de regroupement n’est imposée par fac. grouping (son premier élément a la valeur CHAR_MAX), aucune instance de fac. thousands_sep n’est générée dans le champ de sortie. Autrement, les séparateurs sont insérés après que la conversion d’impression a eu lieu.

La deuxième fonction membre protégée virtuelle :

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

Se comporte comme la première, sauf qu’elle remplace une spécification de conversion de ld par lu.

La troisième fonction membre protégée virtuelle :

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

Se comporte comme la première, sauf qu’elle génère un champ de sortie à virgule flottante à partir de la valeur de val. fac. decimal_point détermine la séquence qui sépare les chiffres entiers des chiffres de fraction. La spécification de conversion d’impression équivalente est déterminée comme suit :

  • Si iosbase. indicateurs &ios_base:: == ios_base::floatfieldfixes, la spécification de conversion est .lf

  • Si iosbase. indicateurs &ios_base ::floatfieldios_base:: == scientifique, la spécification de conversion est .le Si iosbase. flags &ios_base::majuscules est différent de zéro, e est remplacé par E.

  • Autrement, la spécification de conversion est lg. Si iosbase. flags & ios_base ::uppercase is nonzero, g is remplace par G.

Si iosbase. flags & ios_base ::fixed est différent de zéro ou si iosbase. precision est supérieure à zéro, une précision avec la valeur iosbase. precision est ajoutée à la spécification de conversion. Tout remplissage se comporte comme pour un champ de sortie d’entier. Le caractère de remplissage est fill. Pour finir :

  • Si iosbase. flags & ios_base::showpos est différent de zéro, l’indicateur + est ajouté à la spécification de conversion.

  • Si iosbase. flags & ios_base::showpoint est différent de zéro, l’indicateur # est ajouté à la spécification de conversion.

La quatrième fonction membre protégée virtuelle :

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

se comporte le même que le troisième, sauf que le qualificateur l dans la spécification de conversion est remplacé par L.

La cinquième fonction membre protégée virtuelle :

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

Se comporte comme la première, sauf que la spécification de conversion est p, plus tout qualificateur nécessaire pour spécifier le remplissage.

La sixième fonction membre protégée virtuelle :

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

se comporte de la même façon que le premier, sauf qu’il génère un champ de sortie booléen à partir de val.

Un champ de sortie booléen peut avoir deux formes. Si iosbase.flags & ios_base::boolalpha est false, la fonction membre retourne do_put(_Next, _Iosbase, _Fill, (long)val), qui produit généralement une séquence générée de 0 (pour false) ou 1 (pour true). Sinon, la séquence générée est soit fac.falsename (pour false) ou fac.truename (pour true).

La septième fonction membre protégée virtuelle :

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

Se comporte comme la première, sauf qu’elle remplace une spécification de conversion de ld par lld.

La huitième fonction membre protégée virtuelle :

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

Se comporte comme la première, sauf qu’elle remplace une spécification de conversion de ld par llu.

Exemple

Consultez l’exemple relatif à put, qui appelle do_put.

num_put ::iter_type

Type qui décrit un itérateur de sortie.

typedef OutputIterator iter_type;

Notes

Le type est un synonyme du paramètre de modèle OutputIterator.

num_put ::num_put

Constructeur des objets de type num_put.

explicit num_put(size_t _Refs = 0);

Paramètres

_Refs
Valeur entière qui sert à spécifier le type de gestion de la mémoire pour l’objet.

Notes

Les valeurs possibles pour le paramètre _Refs et leur signification sont les suivantes :

  • 0 : la durée de vie de l’objet est gérée par les paramètres régionaux qui le contiennent.

  • 1 : la durée de vie de l’objet doit être gérée manuellement.

  • > 1 : Ces valeurs ne sont pas définies.

Aucun exemple direct n’est possible, car le destructeur est protégé.

Le constructeur initialise son objet de base avec locale::facet(_ Refs).

num_put ::p ut

Convertit un nombre en séquence de CharTypes qui représente le nombre mis en forme pour un paramètre régional donné.

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;

Paramètres

dest
Itérateur qui traite le premier élément de la chaîne insérée.

_Iosbase
Spécifie le flux qui contient des paramètres régionaux avec la facette numpunct utilisée pour les signes de ponctuation de la sortie et des indicateurs pour la mise en forme de la sortie.

_Remplir
Caractère utilisé pour l’espacement.

val
Nombre ou type booléen à envoyer en sortie.

Valeur de retour

Itérateur de sortie qui traite la position située juste au-delà du dernier élément produit.

Notes

Toutes les fonctions membres retournent do_put( next, _Iosbase, _Fill, val).

Exemple

// 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

Voir aussi

<locale>
facet, classe
Sécurité des threads dans la bibliothèque C++ Standard