std::ctype<CharT>:: narrow, do_narrow
|
Défini dans l'en-tête
<locale>
|
||
|
public
:
char narrow ( CharT c, char dflt ) const ; |
(1) | |
|
public
:
const
CharT
*
narrow
(
const
CharT
*
beg,
const
CharT
*
end,
|
(2) | |
|
protected
:
virtual char do_narrow ( CharT c, char dflt ) const ; |
(3) | |
|
protected
:
virtual
const
CharT
*
do_narrow
(
const
CharT
*
beg,
const
CharT
*
end,
|
(4) | |
do_narrow
surchargée de la classe la plus dérivée. La surcharge (1) appelle
do_narrow
(
c, dflt
)
, la surcharge (2) appelle
do_narrow
(
beg, end, dflt, dst
)
.
[
beg
,
end
)
, écrit des caractères rétrécis (ou
dflt
lorsque le rétrécissement échoue) vers les emplacements successifs dans le tableau de caractères pointé par
dst
.
Le rétrécissement est toujours réussi et est toujours réversible (en appelant widen() ) pour tous les caractères du basic source character set (until C++23) basic character set (since C++23) .
- c.-à-d. do_widen ( do_narrow ( c, 0 ) ) == c est toujours vrai pour tout caractère c dans le jeu de caractères source de base (jusqu'à C++23) jeu de caractères de base (depuis C++23) .
Le rétrécissement, s'il réussit, préserve toutes les catégories de classification de caractères connues par is() .
-
c'est-à-dire
is
(
m, c
)
||
!
ctc.
is
(
m, do_narrow
(
c, dflt
)
)
est toujours
true
pour toute catégorie
ctypenommée avec un facetctype<char>ctc et une valeurctype_base::maskm (sauf sido_narrowretourne dflt ).
Le rétrécissement de tout caractère numérique garantit que si le résultat est soustrait du littéral de caractère '0' , la différence est égale à la valeur numérique du caractère original.
- c'est-à-dire pour tout caractère numérique c , l'expression ( do_narrow ( c, dflt ) - '0' ) évalue la valeur numérique du caractère.
Table des matières |
Paramètres
| c | - | caractère à convertir |
| dflt | - | valeur par défaut à produire si la conversion échoue |
| beg | - | pointeur vers le premier caractère dans un tableau de caractères à convertir |
| end | - | pointeur situé après le dernier caractère du tableau de caractères à convertir |
| dst | - | pointeur vers le premier élément du tableau de caractères à remplir |
Valeur de retour
Exemple
#include <iostream> #include <locale> void try_narrow(const std::ctype<wchar_t>& f, wchar_t c) { char n = f.narrow(c, 0); if (n) std::wcout << '\'' << c << "' narrowed to " << +(unsigned char)n << '\n'; else std::wcout << '\'' << c << "' could not be narrowed\n"; } int main() { std::locale::global(std::locale("en_US.utf8")); std::wcout.imbue(std::locale()); std::wcout << std::hex << std::showbase << "In US English UTF-8 locale:\n"; auto& f = std::use_facet<std::ctype<wchar_t>>(std::locale()); try_narrow(f, L'A'); try_narrow(f, L'A'); try_narrow(f, L'ě'); std::locale::global(std::locale("cs_CZ.iso88592")); auto& f2 = std::use_facet<std::ctype<wchar_t>>(std::locale()); std::wcout << "In Czech ISO-8859-2 locale:\n"; try_narrow(f2, L'A'); try_narrow(f2, L'A'); try_narrow(f2, L'ě'); }
Sortie possible :
In US English UTF-8 locale: 'A' narrowed to 0x41 'A' could not be narrowed 'ě' could not be narrowed In Czech ISO-8859-2 locale: 'A' narrowed to 0x41 'A' could not be narrowed 'ě' narrowed to 0xec
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 126 | C++98 |
1. le code représentant la réversibilité était
do_widen ( do_narrow ( c ) , 0 ) == c 2. le code représentant la préservation de catégorie était is ( m, c ) || ! ctc. is ( m, do_narrow ( c ) , dflt ) |
les deux corrigés |
| LWG 153 | C++98 |
narrow
appelait toujours la surcharge (4)
|
appelle la surcharge correspondante |
Voir aussi
invoque
do_widen
(fonction membre publique) |
|
|
rétrécit les caractères
(fonction membre publique de
std::basic_ios<CharT,Traits>
)
|
|
|
rétrécit un caractère large en un caractère étroit sur un seul octet, si possible
(fonction) |