std::codecvt<InternT,ExternT,StateT>:: in, std::codecvt<InternT,ExternT,StateT>:: do_in
|
Défini dans l'en-tête
<locale>
|
||
|
public
:
result in
(
StateT
&
state,
|
(1) | |
|
protected
:
virtual
result do_in
(
StateT
&
state,
|
(2) | |
do_in
de la classe la plus dérivée.
codecvt
définit une conversion, traduit les caractères externes de la plage source
[
from
,
from_end
)
en caractères internes, en plaçant les résultats dans les emplacements suivants à partir de
to
. Convertit au maximum
from_end
-
from
caractères externes et écrit au maximum
to_end
-
to
caractères internes. Laisse
from_next
et
to_next
pointant juste après le dernier élément converti avec succès.
Si cette facette
codecvt
ne définit pas de conversion, aucun caractère n'est converti.
to_next
est défini comme étant égal à
to
,
state
reste inchangé, et
std::codecvt_base::noconv
est retourné.
do_in
(
state, from, from_end, from_next, to, to
+
1
, to_next
)
doit retourner
ok
si
-
cette facette
codecvtest utilisée par basic_filebuf , et -
do_in
(
state, from, from_end, from_next, to, to_end, to_next
)
retournerait
oklorsque to ! = to_end .
Table des matières |
Valeur de retour
Une valeur de type std::codecvt_base::result , indiquant le statut de réussite comme suit :
ok
|
conversion terminée |
partial
|
espace insuffisant dans le tampon de sortie ou fin inattendue du tampon source |
error
|
caractère rencontré ne pouvant être converti |
noconv
|
cette facette est non-convertissante, aucune sortie écrite |
La spécialisation non-convertissante std:: codecvt < char , char , std:: mbstate_t > retourne toujours std::codecvt_base::noconv .
Notes
Requiert que from <= from_end && to <= to_end et que state représente soit l'état de décalage initial, soit soit obtenu en convertissant les caractères précédents dans la séquence.
L'effet sur state est délibérément non spécifié. Dans les facettes standards, il est utilisé pour maintenir l'état de décalage comme lors de l'appel à std::mbsrtowcs , et est donc mis à jour pour refléter l'état de conversion après le dernier caractère externe traité, mais une facette définie par l'utilisateur est libre de l'utiliser pour maintenir tout autre état, par exemple compter le nombre de caractères spéciaux rencontrés.
Exemple
#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"; // ou u8"zß水𝄋" // ou "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9d\x84\x8b" // notez que ce qui suit peut être réalisé avec wstring_convert std::mbstate_t mb = std::mbstate_t(); // état de décalage initial 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); // vérification d'erreur omise par souci de concision internal.resize(to_next - &internal[0]); std::wcout << L"The string in wide encoding: " << internal << '\n'; }
Sortie :
The string in wide encoding: zß水𝄋
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 76 | C++98 |
il n'était pas clair si la conversion devait
permettre de produire un caractère interne à la fois |
requis uniquement si utilisé
par basic_filebuf |
Voir aussi
|
[virtual]
|
lit depuis le fichier associé
(fonction membre protégée virtuelle de
std::basic_filebuf<CharT,Traits>
)
|
|
convertit une chaîne d'octets en chaîne large
(fonction membre publique de
std::wstring_convert<Codecvt,Elem,Wide_alloc,Byte_alloc>
)
|
|
|
convertit une chaîne de caractères multioctets étroite en chaîne large, avec état
(fonction) |
|
|
[virtual]
|
convertit une chaîne de
InternT
vers
ExternT
, par exemple lors de l'écriture dans un fichier
(fonction membre protégée virtuelle) |