Namespaces
Variants

std:: num_put

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

class CharT,
class OutputIt = std:: ostreambuf_iterator < CharT >

> class num_put ;

La classe std::num_put encapsule les règles de formatage des valeurs numériques en chaînes de caractères. Plus précisément, les types bool , long , unsigned long , long long , unsigned long long (depuis C++11) , double , long double , void * , ainsi que tous les types implicitement convertibles vers ceux-ci (tels que int ou float ) sont pris en charge. Les opérateurs de sortie de formatage standard (tels que cout << n ; ) utilisent le facet std::num_put des paramètres régionaux du flux d'E/S pour générer la représentation textuelle des nombres.

cpp/locale/locale/facet std-num put-inheritance.svg

Diagramme d'héritage

Si une spécialisation de std::num_put n'est pas garantie d'être fournie par la bibliothèque standard (voir ci-dessous), les comportements de ses fonctions put() et do_put() 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 :: num_put < char > crée des représentations de nombres en chaînes étroites
std :: num_put < wchar_t > crée des représentations de nombres en chaînes larges

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
iter_type OutputIt

Membres de données

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

Fonctions membres

construit un nouveau facet num_put
(fonction membre publique)
invoque do_put
(fonction membre publique)

Fonctions membres protégées

détruit un facet num_put
(fonction membre protégée)
[virtual]
formate un nombre et écrit dans un flux de sortie
(fonction membre virtuelle protégée)

Exemple

#include <iostream>
#include <iterator>
#include <locale>
#include <string>
int main()
{
    double n = 1234567.89;
    std::cout.imbue(std::locale("de_DE.UTF-8"));
    std::cout << "Conversion directe en chaîne :\n"
              << std::to_string(n) << '\n'
              << "Sortie utilisant une locale allemande :\n"
              << std::fixed << n << '\n'
              << "Sortie utilisant une locale américaine :\n";
    // utiliser le facet directement
    std::cout.imbue(std::locale("en_US.UTF-8"));
    auto& f = std::use_facet<std::num_put<char>>(std::cout.getloc());
    f.put(std::ostreambuf_iterator<char>(std::cout), std::cout, ' ', n);
    std::cout << '\n';
}

Sortie possible :

Conversion directe en chaîne :
1234567.890000
Sortie utilisant une locale allemande :
1.234.567,890000
Sortie utilisant une locale américaine :
1,234,567.890000

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 Applicable à Comportement publié Comportement corrigé
LWG 427 C++98 num_put était garanti d'accepter tout CharT qui
répond aux exigences pour un caractère sur lequel
n'importe quel composant des iostreams peut être instancié
garantit uniquement d'accepter char ,
wchar_t et autres types de caractères
définis par l'implémentation
LWG 2392 C++98 seul le type caractère CharT pouvait être
garanti d'être accepté par num_put
peut garantir d'accepter les types conteneurs
de caractères définis par l'implémentation

Voir aussi

définit les règles de ponctuation numérique
(modèle de classe)
analyse les valeurs numériques à partir d'une séquence de caractères d'entrée
(modèle de classe)
(C++11)
convertit une valeur entière ou à virgule flottante en string
(fonction)
(C++11)
convertit une valeur entière ou à virgule flottante en wstring
(fonction)