Bonjour,
j'ai une question sur la bonne façon de déclarer des "dictionnaires" en c++.
Un petit exemple sur ce que je fais.
Voici mon .h qui contient une énumération
Et maintenant j'ai une méthode qui prend l'enum en parmètre et ou j'utilise la clé (donc le string) à un autre emplacement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 typedef enum LOG_LEVEL { DEBUG = 0, INFO = 1, NOTICE = 2, WARNING = 3, ERROR = 4, CRITICAL = 5, ALERT = 6, EMERGENCY = 7 }LOG_LEVEL;
Et finalement la méthode qui fait la conversion.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 // Passage de l'enum en paramètre void Log::log(LOG_LEVEL _level, const std::string& _message) { // Récupération de la clé. m_type = typeToString(_type); // Syslog display(). openlog(m_type.c_str(), OPTION, LOCATION); // syslog(_level, _message.c_str()); closelog(); }
Donc c'est très peu pratique, lorsque l'on fait une modification, il faut donc le faire dans l’énumération et dans la méthode de conversion.
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
24
25
26 std::string Log::levelToString(LOG_LEVEL level) { std::string result; switch(level) { case 0 : result = "DEBUG"; break; case 1 : result = "INFO"; break; case 2 : result = "NOTICE"; break; case 3 : result = "WARNING"; break; case 4 : result = "ERROR"; break; case 5 : result = "CRITICAL"; break; case 6 : result = "ALERT"; break; case 7 : result = "EMERGENCY"; break; } return result; }
Quelle est la meilleurs façon de le faire en c++ ? En python j'aurai déclarer un dictionnaire dans un fichier externe.
Avec quelques recherches j'ai trouvé une méthode avec la lib de boost :
Mais finalement elle change pas grand chose par rapport à la méthode précédente.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 enum X { A, B, C }; std::map<std::string, X> xmap = boost::map_list_of("A", A)("B", B)("C",C);
Merci de vos conseils.
Partager