std::codecvt<InternT,ExternT,StateT>:: in, std::codecvt<InternT,ExternT,StateT>:: do_in
|
Definiert im Header
<locale>
|
||
|
public
:
result in
(
StateT
&
state,
|
(1) | |
|
protected
:
virtual
result do_in
(
StateT
&
state,
|
(2) | |
do_in
der am stärksten abgeleiteten Klasse auf.
codecvt
-Facette eine Konvertierung definiert, übersetzt sie die externen Zeichen aus dem Quellbereich
[
from
,
from_end
)
in interne Zeichen und platziert die Ergebnisse in den nachfolgenden Positionen beginnend bei
to
. Konvertiert nicht mehr als
from_end
-
from
externe Zeichen und schreibt nicht mehr als
to_end
-
to
interne Zeichen. Lässt
from_next
und
to_next
auf das Element nach dem letzten erfolgreich konvertierten Element zeigen.
Wenn diese
codecvt
-Facette keine Konvertierung definiert, werden keine Zeichen konvertiert.
to_next
wird gleich
to
gesetzt,
state
bleibt unverändert und
std::codecvt_base::noconv
wird zurückgegeben.
do_in
(
state, from, from_end, from_next, to, to
+
1
, to_next
)
muss
ok
zurückgeben, wenn
-
Diese
codecvtFacette wird von basic_filebuf verwendet, und -
do_in
(
state, from, from_end, from_next, to, to_end, to_next
)
würde
okzurückgeben, wenn to ! = to_end .
Inhaltsverzeichnis |
Rückgabewert
Ein Wert vom Typ std::codecvt_base::result , der den Erfolgsstatus wie folgt anzeigt:
ok
|
Konvertierung abgeschlossen |
partial
|
unzureichender Platz im Ausgabepuffer oder unerwartetes Ende des Quellpuffers |
error
|
es wurde ein nicht konvertierbares Zeichen angetroffen |
noconv
|
diese Facette ist nicht-konvertierend, keine Ausgabe geschrieben |
Die nicht-konvertierende Spezialisierung std:: codecvt < char , char , std:: mbstate_t > gibt immer std::codecvt_base::noconv zurück.
Hinweise
Erfordert, dass from <= from_end && to <= to_end und dass state entweder den initialen Shift-Zustand repräsentiert oder durch Konvertierung der vorhergehenden Zeichen in der Sequenz erhalten wurde.
Die Auswirkung auf state ist absichtlich nicht spezifiziert. In Standard-Facets wird es verwendet, um den Shift-Zustand beizubehalten, wie beim Aufruf von std::mbsrtowcs , und wird daher aktualisiert, um den Konvertierungszustand nach dem letzten verarbeiteten externen Zeichen widerzuspiegeln, aber eine benutzerdefinierte Facette kann es frei verwenden, um jeden anderen Zustand zu verwalten, z.B. die Anzahl der speziellen Zeichen zu zählen.
Beispiel
#include <iostream> #include <locale> #include <string> int main() { std::locale::global(std::locale("en_US.utf8")); auto const& f = std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t>> (std::locale()); std::string external = "z\u00df\u6c34\U0001d10b"; // oder u8"zß水𝄋" // oder "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9d\x84\x8b" // Hinweis: Das Folgende könnte mit wstring_convert durchgeführt werden std::mbstate_t mb = std::mbstate_t(); // initialer Schaltzustand std::wstring internal(external.size(), '\0'); const char* from_next; wchar_t* to_next; f.in(mb, &external[0], &external[external.size()], from_next, &internal[0], &internal[internal.size()], to_next); // Fehlerüberprüfung der Kürze halber ausgelassen internal.resize(to_next - &internal[0]); std::wcout << L"The string in wide encoding: " << internal << '\n'; }
Ausgabe:
The string in wide encoding: zß水𝄋
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 76 | C++98 |
es war unklar, ob die Konvertierung die Erzeugung eines
internen Zeichens auf einmal unterstützen muss |
nur erforderlich, wenn verwendet
durch basic_filebuf |
Siehe auch
|
[virtual]
|
liest von der zugehörigen Datei
(virtuelle geschützte Elementfunktion von
std::basic_filebuf<CharT,Traits>
)
|
|
konvertiert eine Byte-Zeichenkette in eine Breitzeichen-Zeichenkette
(öffentliche Elementfunktion von
std::wstring_convert<Codecvt,Elem,Wide_alloc,Byte_alloc>
)
|
|
|
konvertiert eine schmale Multibyte-Zeichenkette in eine Breitzeichen-Zeichenkette mit Zustand
(Funktion) |
|
|
[virtual]
|
konvertiert eine Zeichenkette von
InternT
zu
ExternT
, beispielsweise beim Schreiben in eine Datei
(virtuelle geschützte Elementfunktion) |