std:: format_to_n, std:: format_to_n_result
|
Défini dans l'en-tête
<format>
|
||
|
template
<
class
OutputIt,
class
...
Args
>
std
::
format_to_n_result
<
OutputIt
>
|
(1) | (depuis C++20) |
|
template
<
class
OutputIt,
class
...
Args
>
std
::
format_to_n_result
<
OutputIt
>
|
(2) | (depuis C++20) |
|
template
<
class
OutputIt,
class
...
Args
>
std
::
format_to_n_result
<
OutputIt
>
|
(3) | (depuis C++20) |
|
template
<
class
OutputIt,
class
...
Args
>
std
::
format_to_n_result
<
OutputIt
>
|
(4) | (depuis C++20) |
|
Types auxiliaires
|
||
|
template
<
class
OutputIt
>
struct
format_to_n_result
{
|
(5) | (depuis C++20) |
Formate args selon la chaîne de format fmt , et écrit le résultat dans l'itérateur de sortie out . Au maximum n caractères sont écrits. Si présent, loc est utilisé pour le formatage spécifique aux paramètres régionaux.
Soit
CharT
le type
char
pour les surcharges
(1,3)
,
wchar_t
pour les surcharges
(2,4)
.
Ces surcharges participent à la résolution de surcharge seulement si
OutputIt
satisfait le concept
std::
output_iterator
<
const
CharT
&
>
.
Le comportement n'est pas défini si
OutputIt
ne modélise pas (ne satisfait pas aux exigences sémantiques du) concept
std::
output_iterator
<
const
CharT
&
>
, ou si
std::
formatter
<
std::
remove_cvref_t
<
Ti
>
, CharT
>
ne satisfait pas aux exigences du
BasicFormatter
pour tout
Ti
dans
Args
.
std::format_to_n_result
n'a pas de classes de base, ni de membres autres que
out
,
size
et les fonctions membres spéciales déclarées implicitement.
Table des matières |
Paramètres
| out | - | itérateur vers le tampon de sortie | ||||||||||||||||||||||||||||||||||||||||||||||
| n | - | nombre maximum de caractères à écrire dans le tampon | ||||||||||||||||||||||||||||||||||||||||||||||
| fmt | - |
Chaque champ de remplacement a le format suivant :
1)
champ de remplacement sans spécification de format
2)
champ de remplacement avec spécification de format
|
||||||||||||||||||||||||||||||||||||||||||||||
| args... | - | arguments à formater | ||||||||||||||||||||||||||||||||||||||||||||||
| loc | - | std::locale utilisé pour le formatage spécifique à la locale | ||||||||||||||||||||||||||||||||||||||||||||||
Valeur de retour
Un
format_to_n_result
tel que le membre
out
soit un itérateur situé après la fin de la plage de sortie, et le membre
size
soit la taille totale (non tronquée) de la sortie.
Exceptions
Propage toute exception levée par les opérations de formateur ou d'itérateur.
Notes
L'implémentation de libstdc++ avant GCC-13.3 comportait un bogue dans le rapport de la valeur correcte de format_to_n_result :: out .
Exemple
Sur Godbolt's Compiler Explorer : clang (trunk) + libc++ , GCC (trunk) + libstdc++ .
#include <format> #include <initializer_list> #include <iomanip> #include <iostream> #include <string_view> int main() { char buffer[64]; for (std::size_t max_chars_to_write : {std::size(buffer) - 1, 23uz, 21uz}) { const std::format_to_n_result result = std::format_to_n( buffer, max_chars_to_write, "Hubble's H{2} {3} {0}{4}{1} km/sec/Mpc.", // 24 bytes w/o formatters 71, // {0}, occupies 2 bytes 8, // {1}, occupies 1 byte "\u2080", // {2}, occupies 3 bytes, '₀' (SUBSCRIPT ZERO) "\u2245", // {3}, occupies 3 bytes, '≅' (APPROXIMATELY EQUAL TO) "\u00B1" // {4}, occupies 2 bytes, '±' (PLUS-MINUS SIGN) ); // 24 + 2 + 1 + 3 + 3 + 2 == 35, no trailing '\0' *result.out = '\0'; // adds terminator to buffer const std::string_view str(buffer, result.out); std::cout << "Buffer until '\\0': " << std::quoted(str) << '\n' << "Max chars to write: " << max_chars_to_write << '\n' << "result.out offset: " << result.out - buffer << '\n' << "Untruncated output size: " << result.size << "\n\n"; } }
Sortie :
Buffer until '\0': "Hubble's H₀ ≅ 71±8 km/sec/Mpc." Max chars to write: 63 result.out offset: 35 Untruncated output size: 35 Buffer until '\0': "Hubble's H₀ ≅ 71±8" Max chars to write: 23 result.out offset: 23 Untruncated output size: 35 Buffer until '\0': "Hubble's H₀ ≅ 71�" Max chars to write: 21 result.out offset: 21 Untruncated output size: 35
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 tel que publié | Comportement corrigé |
|---|---|---|---|
| P2216R3 | C++20 | lève std::format_error pour une chaîne de format invalide | une chaîne de format invalide génère une erreur à la compilation |
| P2418R2 | C++20 |
les objets qui ne sont ni const-utilisables ni copiables
(tels que les objets de type générateur) ne sont pas formatables |
permettre le formatage de ces objets |
| P2508R1 | C++20 | il n'existe pas de nom visible par l'utilisateur pour cette fonctionnalité |
le nom
basic_format_string
est exposé
|
Voir aussi
|
(C++20)
|
stocke la représentation formatée des arguments dans une nouvelle chaîne
(modèle de fonction) |
|
(C++20)
|
écrit la représentation formatée de ses arguments via un itérateur de sortie
(modèle de fonction) |
|
(C++20)
|
détermine le nombre de caractères nécessaires pour stocker la représentation formatée de ses arguments
(modèle de fonction) |