std:: num_put
|
Défini dans l'en-tête
<locale>
|
||
|
template
<
class
CharT,
|
||
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.
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 :
-
CharTest l'un des- char ,
- wchar_t , et
- tout autre type de conteneur de caractères défini par l'implémentation qui satisfait aux exigences pour un caractère sur lequel l'un des composants iostream peut être instancié ; et
-
OutputItdoit satisfaire aux exigences de LegacyOutputIterator .
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) |