Namespaces
Variants

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

From cppreference.net
Definiert im Header <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) Öffentliche Memberfunktion, ruft die entsprechende geschützte virtuelle Memberfunktion do_widen der am stärksten abgeleiteten Klasse auf. Überladung (1) ruft do_widen ( c ) auf, Überladung (2) ruft do_widen ( beg, end, dst ) auf.
3) Wandelt das Einzelbyte-Zeichen c in die entsprechende Breitzeichen-Darstellung unter Verwendung der einfachsten sinnvollen Transformation um. Typischerweise gilt dies nur für Zeichen, deren Multibyte-Kodierung ein einzelnes Byte ist (z.B. U+0000-U+007F in UTF-8).
4) Für jedes Zeichen im Zeichenarray [ beg , end ) , schreibt das entsprechende erweiterte Zeichen an die aufeinanderfolgenden Positionen im Zeichenarray, auf das dst zeigt.

Widening gibt immer ein Breitzeichen zurück, aber nur die Zeichen aus dem basic source character set (until C++23) basic character set (since C++23) sind garantiert eine eindeutige, wohldefinierte Widening-Transformation, die ebenfalls garantiert umkehrbar ist (durch narrow() ). In der Praxis werden normalerweise alle Zeichen, deren Multibyte-Darstellung ein einzelnes Byte ist, zu ihren Breitzeichen-Pendants erweitert, und die restlichen möglichen Einzelbyte-Werte werden üblicherweise auf denselben Platzhalterwert abgebildet, typischerweise CharT ( - 1 ) .

Erweiterung, falls erfolgreich, bewahrt alle Zeichenklassifizierungskategorien, die is() bekannt sind.

Inhaltsverzeichnis

Parameter

c - zu konvertierendes Zeichen
dflt - Standardwert bei fehlgeschlagener Konvertierung
beg - Zeiger auf das erste Zeichen im zu konvertierenden Zeichenarray
end - Zeiger auf das Ende-plus-eins des zu konvertierenden Zeichenarrays
dst - Zeiger auf das erste Element des zu füllenden Zeichenarrays

Rückgabewert

1,3) Erweiterter Zeichentyp.
2,4) end

Beispiel

#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'); 
}

Mögliche Ausgabe:

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

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 153 C++98 widen always called overload (4) ruft die entsprechende Überladung auf

Siehe auch

ruft do_narrow auf
(öffentliche Elementfunktion)
erweitert Zeichen
(öffentliche Elementfunktion von std::basic_ios<CharT,Traits> )
erweitert ein Einzelbyte-Schmalzeichen zu einem Breitzeichen, falls möglich
(Funktion)