std::codecvt<InternT,ExternT,StateT>::length, do_length
Von cppreference.com
| Definiert in Header <locale> |
||
| public: int length( StateT& state, const ExternT* from, const ExternT* from_end, |
(1) | |
| protected: virtual int do_length( StateT& state, const ExternT* from, const ExternT* from_end, |
(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 [from, from_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 [to, to + 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
Führen Sie diesen Code aus
#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_lengthmusste 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) |