std::ctype<CharT>:: widen, do_widen
|
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) | |
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.
[
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
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) |