Bonjour à tous,
Je fais appel à vos talents et votre maîtrise de ce merveilleux langage qu'est le C++ (en toute subjectivité...) pour vous soumettre un problème un poil sioux.
Tout d'abord, je vous présente ce que j'ai défini :
Maintenant je vous explique la raison : je manipule des variables de ce type pour effectuer des opérations ("+", "-", comparaison, ...). Un exemple concret :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 typedef std::chrono::duration<double> time_lenght typedef std::chrono::time_point<std::chrono::system_clock, time_lenght> time_date;
Tout fonctionne de manière correcte. J'ai de plus besoin de garder cette précision dans mes calculs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 time_date mon_depart_theorique; time_date mon_arrivee; time_lenght ma_femme_se_prepare; time_lenght mes_enfants_se_disputent; if (mon_depart_theorique + ma_femme_se_prepare + mes_enfants_se_disputent <= mon_arrivee) { cout << "Ouais, j'assure grave!" << endl; } else { cout << "Et m... Encore à la bourre au boulot..." << endl; }
Et puis j'ai eu l'idée farfelue de vouloir faire du log en affichant mes durées et mes dates.
Pour les durées, aucun souci : cout << ma_femme_se_prepare.count() << endl; affiche une valeur correcte (même si l'on pourrait s'attendre à un débordement...).
Pour une différence entre time_date, là aussi c'est tout bon (cout << (mon_arrivee - mon_depart_theorique).count()).
Par contre, afficher juste la date ne peut s'effectuer en passant par std::chrono::system_clock::to_time_t(mon_arrivee).
Je fus naïf car je pensais avoir défini un type time_point basé sur system_clock.
Mais le compilateur ne l'entend pas de cette manière et c'est logique puisqu'il s'attend à trouver en argument de to_time_t du std::chrono::system_clock::time_point.
La subtilité c'est que cette spécialisation du patron std::chrono::time_point est défini avec une duration exprimée en int alors que je suis avec du double dans le mien.
J'ai donc deux questions pour tenter de résoudre le schmi... le schlllmi, le schmmmbli... enfin le truc quoi :
- Est-ce la bonne manière de manipuler des time_point et des durations en voulant conserver une précision à la décimale ?
- Y-a-t-il un moyen d'afficher mon type time_date avec des fonctions standards sans avoir à redéfinir toute la STL ?
Merci d'avance!
Partager