Namespaces
Variants

std::time_get<CharT,InputIt>:: get_weekday, std::time_get<CharT,InputIt>:: do_get_weekday

From cppreference.net
Défini dans l'en-tête <locale>
public :

iter_type get_weekday ( iter_type beg, iter_type end, std:: ios_base & str,

std:: ios_base :: iostate & err, std:: tm * t ) const ;
(1)
protected :

virtual iter_type do_get_weekday ( iter_type beg, iter_type end, std:: ios_base & str,

std:: ios_base :: iostate & err, std:: tm * t ) const ;
(2)
1) Fonction membre publique, appelle la fonction membre virtuelle protégée do_get_weekday de la classe la plus dérivée.
2) Lit successivement les caractères de la séquence [ beg , end ) et analyse le nom du jour de la semaine (éventuellement abrégé), en utilisant le format par défaut pour les jours de la semaine attendu par cette locale, qui est le même format que "%a" utilisé par les fonctions std::get_time , time_get::get , et la fonction POSIX strptime() .

S'il trouve un nom abrégé, suivi des caractères valides pour le nom complet, il continue la lecture jusqu'à ce qu'il consomme tous les caractères du nom complet ou trouve un caractère non attendu, auquel cas l'analyse échoue même si les premiers caractères formaient une abréviation valide.

Le jour de la semaine analysé est stocké dans le champ std::tm t - > tm_wday .

Si l'itérateur de fin est atteint avant qu'un nom de jour de la semaine valide soit lu, la fonction définit std::ios_base::eofbit dans err . Si une erreur d'analyse est rencontrée, la fonction définit std::ios_base::failbit dans err .

Table des matières

Paramètres

beg - itérateur désignant le début de la séquence à analyser
end - itérateur indiquant la fin de la séquence à analyser (un après le dernier élément)
str - un objet de flux utilisé par cette fonction pour obtenir les facettes de locale lorsque nécessaire, par exemple std::ctype pour ignorer les espaces blancs ou std::collate pour comparer des chaînes
err - objet des indicateurs d'erreur de flux modifié par cette fonction pour signaler les erreurs
t - pointeur vers l'objet std::tm qui contiendra le résultat de cet appel de fonction

Valeur de retour

Itérateur pointant un caractère au-delà du dernier caractère dans [ beg , end ) qui a été reconnu comme faisant partie d'un nom de jour de la semaine valide.

Notes

Cette fonction est généralement insensible à la casse.

Si une erreur d'analyse est rencontrée, la plupart des implémentations de cette fonction laissent * t inchangé.

Exemple

#include <initializer_list>
#include <iostream>
#include <iterator>
#include <locale>
#include <sstream>
#include <string_view>
void try_get_wday(std::string_view s)
{
    std::cout << "Analyse du jour de la semaine dans '" << s
              << "' avec la locale " << std::locale().name() << '\n';
    std::istringstream str{s.data()};
    std::ios_base::iostate err{std::ios_base::goodbit};
    std::tm t;
    std::time_get<char> const& facet = std::use_facet<std::time_get<char>>(str.getloc());
    std::istreambuf_iterator<char> ret = facet.get_weekday({str}, {}, str, err, &t);
    str.setstate(err);
    std::istreambuf_iterator<char> last{};
    if (str)
    {
        std::cout << "Analyse réussie, numéro du jour de la semaine est " << t.tm_wday;
        if (ret != last)
        {
            std::cout << " Contenu restant : ";
            std::copy(ret, last, std::ostreambuf_iterator<char>(std::cout));
        }
        else
            std::cout << " l'entrée a été entièrement consommée";
    }
    else
    {
        std::cout << "Échec de l'analyse. Chaîne non analysée : ";
        std::copy(ret, last, std::ostreambuf_iterator<char>(std::cout));
    }
    std::cout << '\n';
}
void demo(std::string_view locale_name, std::initializer_list<std::string_view>&& data)
{
    try
    {
        std::locale::global(std::locale(locale_name.data()));
    }
    catch (std::runtime_error const& ex)
    {
        std::cout << "Impossible de configurer la locale : " << locale_name << "\n"
                     "Exception : " << ex.what() << '\n';
        return;
    }
    for (std::string_view const weekday : data)
        try_get_wday(weekday);
}
int main()
{
    demo("lt_LT.utf8", {"Št", "Šeštadienis"});
    demo("en_US.utf8", {"SATELLITE"});
    demo("ja_JP.utf8", {"土曜日"});
}

Sortie possible :

Analyse du jour de la semaine à partir de 'Št' dans la locale lt_LT.utf8
Analyse réussie, le numéro du jour de la semaine est 6, l'entrée a été entièrement consommée
Analyse du jour de la semaine à partir de 'Šeštadienis' dans la locale lt_LT.utf8
Analyse réussie, le numéro du jour de la semaine est 6, l'entrée a été entièrement consommée
Analyse du jour de la semaine à partir de 'SATELLITE' dans la locale en_US.utf8
Analyse réussie, le numéro du jour de la semaine est 6, contenu restant : ELLITE
Analyse du jour de la semaine à partir de '土曜日' dans la locale ja_JP.utf8
Analyse réussie, le numéro du jour de la semaine est 6, l'entrée a été entièrement consommée

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 248 C++98 eofbit n'était pas défini lors de l'atteinte de l'itérateur de fin définit eofbit si un nom de jour de la semaine valide n'a pas été lu

Voir aussi

(C++11)
analyse une valeur de date/heure selon un format spécifié
(modèle de fonction)