Namespaces
Variants

std:: money_get

From cppreference.net
Défini dans l'en-tête <locale>
template <

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

> class money_get ;

Modèle de classe std::money_get encapsule les règles d'analyse des valeurs monétaires à partir des flux de caractères. Le manipulateur d'E/S standard std::get_money utilise le facette std::money_get de la locale du flux d'E/S.

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

Diagramme d'héritage

Si une spécialisation de std::money_get n'est pas garantie d'être fournie par la bibliothèque standard (voir ci-dessous), les comportements de ses fonctions get() et do_get() ne sont pas garantis comme spécifié.

Table des matières

Spécialisations

La bibliothèque standard garantit la fourniture des spécialisations suivantes (elles sont requises pour être implémentées par tout objet locale ):

Défini dans l'en-tête <locale>
std :: money_get < char > analyse les représentations sous forme de chaînes étroites des valeurs monétaires
std :: money_get < wchar_t > analyse les représentations sous forme de chaînes larges des valeurs monétaires

En outre, la bibliothèque standard garantit également de fournir chaque spécialisation qui satisfait aux exigences de type suivantes :

Types imbriqués

Type Définition
char_type CharT
string_type std:: basic_string < CharT >
iter_type InputIt

Membres de données

Membre Description
std::locale::id id [static] l'identifiant de la facette

Fonctions membres

construit un nouveau facet money_get
(fonction membre publique)
invoque do_get
(fonction membre publique)

Fonctions membres protégées

détruit un facet money_get
(fonction membre protégée)
[virtual]
analyse une valeur monétaire depuis un flux d'entrée
(fonction membre virtuelle protégée)

Exemple

#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 << "\" analysé avec le manipulateur d'E/S : ";
    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 << "\" analysé directement avec le facet : ";
    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';
}

Sortie :

"$1.11 $2.22 $3.33" analysé avec le manipulateur d'E/S : 1.11 2.22 3.33
"USD  1,234.56" analysé directement avec le facet : 1234.56

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
LWG 427 C++98 money_get était garanti d'accepter tout CharT qui
répond aux exigences pour un caractère sur lequel
n'importe quel composant iostream peut être instancié
ne garantit que d'accepter char ,
wchar_t et autres types de caractères
définis par l'implémentation
LWG 2392 C++98 seul le type de caractère CharT pouvait être
garanti d'être accepté par money_get
peut garantir d'accepter les types de conteneurs
de caractères définis par l'implémentation

Voir aussi

définit les paramètres de formatage monétaire utilisés par std::money_get et std::money_put
(modèle de classe)
formate une valeur monétaire pour la sortie sous forme de séquence de caractères
(modèle de classe)
(C++11)
analyse une valeur monétaire
(modèle de fonction)