Partager via


money_get, classe

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

Syntaxe

template <class CharType, class InputIterator = istreambuf_iterator<CharType>>
class money_get : public locale::facet;

Paramètres

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

InputIterator
Type d'itérateur depuis lequel les fonctions get lisent leur entrée.

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
money_get Constructeur des objets de type money_get utilisés pour extraire des valeurs numériques de séquences représentant des valeurs monétaires.

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 d'entrée.
string_type Type qui décrit une chaîne contenant des caractères de type CharType.

Fonctions Membre

Fonction membre Description
do_get Fonction virtuelle appelée pour extraire une valeur numérique d'une séquence de caractères représentant une valeur monétaire.
get Extrait une valeur numérique d'une séquence de caractères représentant une valeur monétaire.

Spécifications

Header :<locale>

Espace de noms : std

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

money_get ::d o_get

Fonction virtuelle appelée pour extraire une valeur numérique d’une séquence de caractères qui représente une valeur monétaire.

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

Paramètres

first
Itérateur d’entrée traitant le début de la séquence à convertir.

last
Itérateur d’entrée traitant la fin de la séquence à convertir.

Intl
Valeur booléenne indiquant le type de symbole monétaire attendu dans la séquence : true si international, false s’il est intérieur.

Iosbase
Indicateur de format qui, quand il est défini, indique que le symbole monétaire est facultatif. Dans le cas contraire, il est obligatoire.

État
Définit les éléments de masque de bits appropriés pour l’état de flux selon que les opérations ont réussi ou non.

val
Chaîne stockant la séquence convertie.

Valeur de retour

Itérateur d’entrée qui traite le premier élément au-delà du champ d’entrée monétaire.

Notes

La première fonction membre protégée virtuelle tente de faire correspondre des éléments séquentiels en commençant au premier dans la séquence [ first, last) jusqu’à ce qu’elle ait reconnu un champ d’entrée monétaire complet et non vide. En cas de réussite, il convertit ce champ en séquence d’un ou plusieurs chiffres décimaux, éventuellement précédés d’un signe moins ( -), pour représenter la quantité et stocker le résultat dans le val d’objet string_type. Elle retourne un itérateur désignant le premier élément au-delà du champ d’entrée monétaire. Sinon, la fonction stocke une séquence vide dans val et définit ios_base::failbit dans l’état. Elle retourne un itérateur désignant le premier élément au-delà de tout préfixe d’un champ d’entrée monétaire valide. Dans les deux cas, si la valeur de retour est égale à last, la fonction définit ios_base::eofbit dans State.

La deuxième fonction membre protégée virtuelle se comporte comme la première, sauf que si elle réussit, elle convertit la séquence de chiffres signée éventuellement en valeur de type long double et stocke cette valeur dans val.

Le format d’un champ d’entrée monétaire est déterminé par la facette locale retournée par l’appel effectif use_facet<moneypunct<CharType, intl>>( iosbase). getloc).

Plus précisément :

  • fac. neg_format détermine l’ordre dans lequel les composants du champ se produisent.

  • fac. curr_symbol détermine la séquence d’éléments qui constitue un symbole monétaire.

  • fac. positive_sign détermine la séquence d’éléments qui constitue un signe positif.

  • fac. negative_sign détermine la séquence d’éléments qui constitue un signe négatif.

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

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

  • fac. decimal_point détermine l’élément qui sépare les chiffres entiers des chiffres de fraction.

  • fac. frac_digits détermine le nombre de chiffres de fraction significatifs à droite de la virgule décimale. Lors de l’analyse d’un montant monétaire avec davantage de chiffres de fraction que frac_digits n’en demande, do_get arrête l’analyse après avoir consommé au plus frac_digits caractères.

Si la chaîne de signe (fac. negative_sign ou fac. positive_sign) a plusieurs éléments, seul le premier élément est mis en correspondance lorsque l’élément est égal à money_base ::sign apparaît dans le modèle de format (fac). neg_format Les éléments restants sont mis en correspondance à la fin du champ d’entrée monétaire. Si aucune chaîne n’a un premier élément qui correspond à l’élément suivant dans le champ d’entrée monétaire, la chaîne de signe est considérée comme étant vide et le signe est positif.

Si iosbase. flags &showbase est différent de zéro, la fac de chaîne. curr_symbol doit correspondre là où l’élément égal à money_base::symbol apparaît dans le modèle de format. Sinon, si money_base::symbol se produit à la fin du modèle de format, et s’il ne reste aucun élément de la chaîne de signe à mettre en correspondance, le symbole monétaire n’est pas mis en correspondance. Dans le cas contraire, le symbole monétaire est mis en correspondance de manière facultative.

Si aucune instance de fac. thousands_sep ne se produit dans la partie valeur du champ d’entrée monétaire (où l’élément égal à money_base::value apparaît dans le modèle de format), aucune contrainte de regroupement n’est imposée. Autrement, toute contrainte de regroupement imposée par fac. grouping est appliquée. Notez que la séquence de chiffres qui en résulte représente un entier dont les chiffres décimaux fac. frac_digits de poids faible sont considérés comme étant à droite de la virgule décimale.

Un espace blanc arbitraire est mis en correspondance là où l’élément égal à money_base::space apparaît dans le modèle de format, s’il apparaît à un emplacement autre que la fin du modèle de format. Dans le cas contraire, aucun espace blanc interne n’est mis en correspondance. Un élément ch est considéré comme un espace blanc si use_facet<ctype<CharType>>( iosbase). getloc). is( ctype_base ::space, ch) est true.

Exemple

Consultez l’exemple relatif à get, qui appelle do_get.

money_get ::get

Extrait une valeur numérique d'une séquence de caractères représentant une valeur monétaire.

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;

Paramètres

first
Itérateur d’entrée traitant le début de la séquence à convertir.

last
Itérateur d’entrée traitant la fin de la séquence à convertir.

Intl
Valeur booléenne indiquant le type de symbole monétaire attendu dans la séquence : true si international, false s’il est intérieur.

Iosbase
Indicateur de format qui, quand il est défini, indique que le symbole monétaire est facultatif. Dans le cas contraire, il est obligatoire.

État
Définit les éléments de masque de bits appropriés pour l’état de flux selon que les opérations ont réussi ou non.

val
Chaîne stockant la séquence convertie.

Valeur de retour

Itérateur d’entrée qui traite le premier élément au-delà du champ d’entrée monétaire.

Notes

Les deux fonctions membres retournent do_get(first, last, Intl, Iosbase, State, val).

Exemple

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

Type qui décrit un itérateur d'entrée.

typedef InputIterator iter_type;

Notes

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

money_get ::money_get

Constructeur des objets de type money_get utilisés pour extraire des valeurs numériques de séquences représentant des valeurs monétaires.

explicit money_get(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 les paramètres régionaux ::facet(_Refs).

money_get ::string_type

Type qui décrit une chaîne contenant des caractères de type CharType.

typedef basic_string<CharType, Traits, Allocator> string_type;

Notes

Le type décrit une spécialisation du modèle de classe basic_string.

Voir aussi

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