Namespaces
Variants

std::codecvt<InternT,ExternT,StateT>:: in, std::codecvt<InternT,ExternT,StateT>:: do_in

From cppreference.net
Definiert im Header <locale>
public :

result in ( StateT & state,
const ExternT * from,
const ExternT * from_end,
const ExternT * & from_next,
InternT * to,
InternT * to_end,

InternT * & to_next ) const ;
(1)
protected :

virtual result do_in ( StateT & state,
const ExternT * from,
const ExternT * from_end,
const ExternT * & from_next,
InternT * to,
InternT * to_end,

InternT * & to_next ) const ;
(2)
1) Öffentliche Memberfunktion, ruft die Memberfunktion do_in der am stärksten abgeleiteten Klasse auf.
2) Wenn diese 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 codecvt Facette wird von basic_filebuf verwendet, und
  • do_in ( state, from, from_end, from_next, to, to_end, to_next ) würde ok zurü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)