Namensräume
Varianten
Aktionen

std::codecvt<InternT,ExternT,StateT>::length, do_length

Von cppreference.com
< cpp‎ | locale‎ | codecvt
 
 
 
 
 
Definiert in Header <locale>
public:

int length( StateT& state, const ExternT* from, const ExternT* from_end,

            std::size_t max ) const;
(1)
protected:

virtual int do_length( StateT& state, const ExternT* from, const ExternT* from_end,

                       std::size_t max ) const;
(2)
1) Öffentliche Member-Funktion, ruft die Member-Funktion do_length der am weitesten abgeleiteten Klasse auf.
2) Versucht, die ExternT-Zeichen aus dem Zeichen-Array, das durch [fromfrom_end) definiert ist, gegeben den Anfangskonvertierungszustand state, in höchstens max InternT-Zeichen zu konvertieren, und gibt die Anzahl der ExternT-Zeichen zurück, die eine solche Konvertierung verbrauchen würde. Modifiziert state, als ob do_in(state, from, from_end, from, to, to + max, to) für einen imaginären Ausgabepuffer [toto + max) ausgeführt worden wäre.

Inhalt

[bearbeiten] Rückgabewert

Die Anzahl der ExternT-Zeichen, die verbraucht würden, wenn sie durch do_in() konvertiert würden, bis entweder alle from_end - from Zeichen verbraucht waren oder max InternT-Zeichen erzeugt wurden oder ein Konvertierungsfehler auftrat.

Die nicht-konvertierende Spezialisierung std::codecvt<char, char, std::mbstate_t> gibt std::min(max, from_end - from) zurück.

[bearbeiten] Beispiel

#include <iostream>
#include <locale>
#include <string>
 
int main()
{
    using facet_type = std::codecvt<wchar_t, char, std::mbstate_t>;
 
    // narrow multibyte encoding
    std::string s = "z\u00df\u6c34\U0001d10b"; // or u8"zß水𝄋"
              // or "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9d\x84\x8b"
 
    std::locale loc("en_US.UTF-8");
    facet_type const& codecvt_facet = std::use_facet<facet_type>(loc);
    std::mbstate_t mb = std::mbstate_t();
    std::cout << "Only the first "
              << codecvt_facet.length(mb, s.data(), s.data() + s.size(), 2)
              << " bytes out of " << s.size() << " would be consumed"
                 " to produce the first 2 characters\n";
}

Ausgabe

Only the first 3 bytes out of 10 would be consumed to produce the first 2 characters

[bearbeiten] 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 75 C++98 die Auswirkung auf state war nicht spezifiziert spezifiziert
LWG 305 C++98 std::codecvt<wchar_t, char, std::mbstate_t>::do_length
musste std::min(max, from_end - from) zurückgeben
nicht erforderlich.

[bearbeiten] Siehe auch

[virtuell]
konvertiert eine Zeichenkette von ExternT nach InternT, z. B. beim Lesen aus einer Datei
(virtual protected member function) [bearbeiten]