Namespaces
Variants

std::ctype<CharT>:: widen, do_widen

From cppreference.net
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)
1,2) Fonction membre publique, appelle la fonction membre virtuelle protégée correspondante 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 ) .
3) Convertit le caractère sur un octet c en sa représentation de caractère étendu correspondante en utilisant la transformation la plus simple raisonnable. Typiquement, cela s'applique uniquement aux caractères dont l'encodage multioctet est sur un seul octet (par exemple U+0000-U+007F en UTF-8).
4) Pour chaque caractère dans le tableau de caractères [ 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

1,3) Caractère élargi.
2,4) end

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)