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:
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:
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:
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:
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.