Namespaces
Variants

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

From cppreference.net
Défini dans l'en-tête <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) Fonction membre publique, appelle la fonction membre do_in de la classe la plus dérivée.
2) Si cette facette 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 codecvt est utilisée par basic_filebuf , et
  • do_in ( state, from, from_end, from_next, to, to_end, to_next ) retournerait ok lorsque 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)