Bonjour. Dans une de mes classes, j'utilise une union pour me permettre d'avoir un type variable dans une std::pair. J'aimerais cependant savoir s'il est possible de vérifier que le membre appelé contient bien une valeur. Est-ce possible ?
Voilà le contexte:
Header:
CPP:
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 class private: union UAllowedValues{ char* text; int integer; bool boolean; }; std::map<std::string, std::pair<UAllowedValues, bool> > _couples; // key - [ value + readOnly ] public: std::string getStringValue(const std::string &key); int getIntValue(const std::string &key); bool getBoolValue(const std::string &key); };
L'idée serait de lancer une exception si on fait appel à getIntValue alors que la valeur de la clé est de type string par exemple.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 // J'ai omis volontairement la vérification de l'existence de la clé. std::string Preferences::getStringValue(const std::string &key) { return std::string(_couples.find(key)->second.first.text); } int Preferences::getIntValue(const std::string &key) { return _couples.find(key)->second.first.integer; } bool Preferences::getBoolValue(const std::string &key) { return _couples.find(key)->second.first.boolean; }
Merci d'avance !
Partager