std::ctype<CharT>:: widen, do_widen
|
Défini dans l'en-tête
<locale>
|
||
|
public
:
CharT widen ( char c ) const ; |
(1) | |
|
public
:
const char * widen ( const char * beg, const char * end, CharT * dst ) const ; |
(2) | |
|
protected
:
virtual CharT do_widen ( char c ) const ; |
(3) | |
|
protected
:
virtual const char * do_widen ( const char * beg, const char * end, CharT * dst ) const ; |
(4) | |
do_widen
surchargée de la classe la plus dérivée. La surcharge (1) appelle
do_widen
(
c
)
, la surcharge (2) appelle
do_widen
(
beg, end, dst
)
.
[
beg
,
end
)
, écrit le caractère élargi correspondant aux emplacements successifs dans le tableau de caractères pointé par
dst
.
L'élargissement retourne toujours un caractère large, mais seuls les caractères du jeu de caractères source de base (jusqu'à C++23) jeu de caractères de base (depuis C++23) sont garantis d'avoir une transformation d'élargissement unique et bien définie, qui est également garantie réversible (par narrow() ). En pratique, tous les caractères dont la représentation multioctet est un seul octet sont généralement élargis vers leurs équivalents en caractères larges, et le reste des valeurs d'octet possibles sont généralement mappées vers la même valeur de substitution, typiquement CharT ( - 1 ) .
L'élargissement, s'il réussit, préserve toutes les catégories de classification de caractères connues par is() .
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_widen(const std::ctype<wchar_t>& f, char c) { wchar_t w = f.widen(c); std::cout << "The single-byte character " << +(unsigned char)c << " widens to " << +w << '\n'; } int main() { std::locale::global(std::locale("cs_CZ.iso88592")); auto& f = std::use_facet<std::ctype<wchar_t>>(std::locale()); std::cout << std::hex << std::showbase << "In Czech ISO-8859-2 locale:\n"; try_widen(f, 'a'); try_widen(f, '\xdf'); // German letter ß (U+00df) in ISO-8859-2 try_widen(f, '\xec'); // Czech letter ě (U+011b) in ISO-8859-2 std::locale::global(std::locale("cs_CZ.utf8")); auto& f2 = std::use_facet<std::ctype<wchar_t>>(std::locale()); std::cout << "In Czech UTF-8 locale:\n"; try_widen(f2, 'a'); try_widen(f2, '\xdf'); try_widen(f2, '\xec'); }
Sortie possible :
In Czech ISO-8859-2 locale: The single-byte character 0x61 widens to 0x61 The single-byte character 0xdf widens to 0xdf The single-byte character 0xec widens to 0x11b In Czech UTF-8 locale: The single-byte character 0x61 widens to 0x61 The single-byte character 0xdf widens to 0xffffffff The single-byte character 0xec widens to 0xffffffff
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 correct |
|---|---|---|---|
| LWG 153 | C++98 |
widen
appelait toujours la surcharge (4)
|
appelle la surcharge correspondante |
Voir aussi
appelle
do_narrow
(fonction membre publique) |
|
|
élargit les caractères
(fonction membre publique de
std::basic_ios<CharT,Traits>
)
|
|
|
élargit un caractère étroit d'un octet en caractère large, si possible
(fonction) |