Désolé pour le délai.
J'ai voulu prendre un peu de temps pour offrir un exemple d'architecture de classes "facilement" implémentable.
Je vous la fournis sous forme d'un extrait de serie.h basée sur la version "Avril 07" du 25/04/2024
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
| struct InfosVisionnage
{
const Saison& m_saison;
InfosVisionnage(const Saison& saison, std::filesystem::path const& m_cheminFichier);
std::filesystem::path m_cheminFichier;
unsigned short int m_NumeroSaison{};
unsigned short int m_NumeroEpisode{};
std::vector<DateRecord> m_DatesVisionnage{ 0 };
std::wstring m_streaming{ L"" };
bool m_fichier_pas_zero{ false };
std::wstring m_titre;
std::wstring m_deux_points;
std::wstring m_sous_titre;
unsigned short int m_numero{ 1 };
long m_Duree{ -1 };
std::wstring m_phrases{ L"" };
private :
void initialiser_duree(const std::wstring& m);
};
struct SequenceVisionnage
{
SequenceVisionnage(const Episode& episode) :m_episode{ episode } {};
SequenceVisionnage(const SequenceVisionnage& seq) = default;
void Print();
std::wstring Print_Dates_de_visionnage(std::vector<DateRecord>& dr);
bool Print_Titre_chiffre_et_point_ou_pas(unsigned short int episode);
std::wstring m_min = L"min";
std::vector<std::wstring>keyColor{ L"\x1b[94;1m", L"\x1b[38;2;0;255;0m" }; // keyColor[0] (bleu) et keyColor[1] (vert)
std::wstring valuesColor = L"\x1b[38;2;255;255;255m"; // Blanc
std::wstring m_streaming{L""};
//bool m_fichier_pas_zero{ false };
std::wstring m_titre;
std::wstring m_deux_points;
std::wstring m_sous_titre;
long m_duree_en_seconde{ -1 };
std::wstring m_phrases{ L"" };
std::vector<DateRecord> m_DatesVisionnage{};
private:
const Episode& m_episode;
};
struct Episode
{
const Saison& m_saison;
Episode(const InfosVisionnage& inf_vis) :m_saison{inf_vis.m_saison} {};
void Print();
std::vector<SequenceVisionnage> m_liste_visionnages{};
void ajouter_SequenceVisionnage(const InfosVisionnage& info_vis);
int m_numero{ -1 };
long m_Duree{ -1 };
std::wstring m_phrases{ L"" };
};
struct Saison
{
public:
Saison(std::filesystem::path const& cheminFichier);
void afficher(std::filesystem::path const& cheminFichier);
void ajouter_InfosVisionnage(SequenceVisionnage const& seq_vis);
void initialiser_Fichier(std::filesystem::path const& cheminFichier);
void initialiser_Chaine(std::filesystem::path const& cheminFichier);
void initialiser_Netflix(std::filesystem::path const& cheminFichier);
void initialiser_Note(std::filesystem::path const& cheminFichier);
void initialiser_Titre(std::filesystem::path const& cheminFichier);
void Print();
void Print_Avec();
void Print_Chaine();
const void Print_Date_etc();
void Print_Images();
void Print_Netflix();
std::wstring min = L"min";
std::vector<std::wstring>keyColor{ L"\x1b[94;1m", L"\x1b[38;2;0;255;0m" }; // keyColor[0] (bleu) et keyColor[1] (vert)
std::wstring valuesColor = L"\x1b[38;2;255;255;255m"; // Blanc
std::vector<std::pair<std::wstring, std::wstring>> m_avec;
std::pair<std::tm, std::wstring>m_dossier;
std::wstring m_chaine;
std::vector<std::wstring> m_image;
bool netflix{ false };
double m_note = -1.0;
std::pair<unsigned short int, std::wstring>saison;
std::wstring m_titre;
bool affichage_avec_actif = true;
bool affichage_chaine_actif = true;
bool affichage_date_etc_actif = true;
bool affichage_image_actif = true;
bool affichage_netflix_actif = true;
std::map<int, std::shared_ptr<Episode>> m_liste_episodes;
int m_numero{ -1 };
};
class Serie
{
public:
Serie(std::filesystem::path racine);
~Serie();
void initialiser_Fichier(std::filesystem::path const& m_cheminFichier);
void initialiser_Chaine(std::filesystem::path const& m_cheminFichier);
const void Print();
std::vector<Saison>saisons{};
std::filesystem::path getRacine() { return racine; };
std::filesystem::path getFileName() { return racine.filename(); };
private:
const void Print_Saison(Saison saison);
const void Print_Saisons();
const void Print_Chaine();
std::filesystem::path racine;
std::wstring min = L"min";
std::vector<std::wstring>keyColor{ L"\x1b[94;1m", L"\x1b[38;2;0;255;0m" }; // keyColor[0] (bleu) et keyColor[1] (vert)
std::wstring valuesColor = L"\x1b[38;2;255;255;255m"; // Blanc
std::wstring m_audiodescription;
std::wstring m_chaine;
std::vector<std::wstring> m_genre;
std::vector<std::wstring> m_image;
std::vector<std::wstring> m_nationalite;
std::wstring m_sous_genre{};
bool affichage_avec_actif = true;
bool affichage_audiodescription_actif = true;
bool affichage_chaine_actif = true;
bool affichage_episode_titre_actif = true;
bool affichage_image_actif = true;
bool affichage_genres_actif = true;
bool affichage_nationalite_actif = true;
//bool affichage_saison_actif = true;
bool affichage_saison_date_etc_actif = true;
bool affichage_saisons_actif = true;
bool affichage_serie_actif = true;
bool affichage_sous_genre_actif = true;
}; |
EDIT :
Je pense que vos galères sont toutes liées aux types de vos champs, par exemple, j'utilise des ici des pointeurs intelligents :
std::map<int, std::shared_ptr<Episode>> m_liste_episodes;
ainsi, le code dans le .h
Episode(SequenceVisionnage const& seq_vis);
devient
Episode(const InfosVisionnage& inf_vis);
void ajouter_InfosVisionnage(SequenceVisionnage const& seq_vis);
devient
void ajouter_InfosVisionnage(InfosVisionnage const& seq_vis);
supprimer la ligne
Episode creer_Episode(InfosVisionnage const& seq_vis);
ainsi que l'implémentation dans le .cpp
le code dans le .cpp
mettez en commentaire tout le code de la fonction "Episode::Episode(const InfosVisionnage& inf_vis)".
On verra ensemble comment l'implémenter "correctement".
Le code
1 2 3 4
| void Saison::ajouter_InfosVisionnage(SequenceVisionnage const& seq_vis)
{
m_liste_episodes.insert({ 1, seq_vis });
} |
devient
1 2 3 4 5
| void Saison::ajouter_InfosVisionnage(const InfosVisionnage& inf_vis)
{
Episode ep{ inf_vis };
m_liste_episodes.emplace(std::pair<const int, shared_ptr<Episode>>{ inf_vis.m_NumeroEpisode, make_shared<Episode>(ep)});
} |
le code
1 2 3 4 5 6 7 8 9
| if (m_liste_episodes.find(info_vis.m_NumeroEpisode) != m_liste_episodes.end())
{
m_liste_episodes[info_vis.m_NumeroEpisode].ajouter_InfosVisionnage(info_vis);
}
else
{
//m_liste_episodes[info_vis.m_NumeroEpisode] = creer_Episode(info_vis);
m_liste_episodes.emplace(std::pair<const int, Episode>{ info_vis.m_NumeroEpisode, creer_Episode(info_vis) });
} |
devient
1 2 3 4 5 6 7 8 9 10
| if (m_liste_episodes.find(info_vis.m_NumeroEpisode) != m_liste_episodes.end())
{
m_liste_episodes[info_vis.m_NumeroEpisode]->ajouter_InfosVisionnage(info_vis);
}
else
{
//m_liste_episodes[info_vis.m_NumeroEpisode] = creer_Episode(info_vis);
Episode ep{ info_vis };
m_liste_episodes.emplace(std::pair<const int, shared_ptr<Episode>>{ info_vis.m_NumeroEpisode, make_shared<Episode>(ep) });
} |
Partager