Bonjour.
Je cherche à modéliser une classe qui permettra à mon programme de tracer tout ce qu'il fait.
Je voudrais pouvoir m'en servir comme ça (en gros) :
Dans cet exemple, je suppose quelque chose comme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 LogsManager a; a->log("Je commençe le programme"); // certains des logs sont statiques a->log("Zut, j'ai un objet d'id " + id + " qui est négatif"); // mais pas tous // on peut (doit) donner un type à un log a->log("Je commençe à parser", LogsManager::Parsing); // on peut même en donner plusieurs std::list<LogsManager::LogsTypes> types; types.push_back(LogsManager::Parsing); types.push_back(LogsManager::StrangeData); a->log("J'ai parsé la valeur " + val + " qui est supérieure à 100", types);
Ceci ne semble pas présenter de grandes difficultés.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 class LogsManager { public : ... public : enum LogsTypes { Parsing = 0, StrangeData, ... } .... }
Sauf que cela me chagrine que les types soient aussi dynamiques.
Cela va me donner derrière une fonction qui aura comme tête :
Et ça ce n'est pas très joli.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 void LogsManager::log(const std::string& log, const std::list<LogsManager::LogsTypes>* types) { if (types) { std::list<LogsManager::LogsTypes>::iterator it; for(it = types.begin(); it != types.end(); it++) { switch (*it) { case Parsing : ... break; case StrangeData : ... break; ... } } .... } }
J'imagine qu'il existe une chouette solution pour faire cela statiquement, peut-être avec un genre de typelist, mais tout ce que je peux imaginer est terriblement compliqué.
Est-ce que quelqu'un saurait m'orienter vers une solution plus élégante ?
Merci par avance
Partager