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:
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
 
classprivate:
        …
 
        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);
};
CPP:
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;
    }
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.

Merci d'avance !