IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Comment savoir si un membre n'a pas été initialisé


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 59
    Points : 59
    Points
    59
    Par défaut Comment savoir si un membre n'a pas été initialisé
    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 !

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Regarde dans cette conversation récente Savoir quel membre d'une union est utilisé, tu devrais trouver des éléments de réponse à ton problème.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Normalement avec Boost.Variant et un visiteur, tu devrais pouvoir t'en sortir.

  4. #4
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 59
    Points : 59
    Points
    59
    Par défaut
    Merci à tous :-)
    Je vais suivre la suggestion de 3DArchi, qui me semble précisément définie pour ce type de situation.
    Cependant, il semblerait qu'un visiteur ne soit pas nécessaire. La fonction get() semble suffisante pour mon utilisation.
    The get function allows run-time checked, type-safe retrieval of the content of the given variant.
    Encore merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment savoir que votre équipe projet n’est pas agile
    Par Michael Guilloux dans le forum ALM
    Réponses: 27
    Dernier message: 29/05/2015, 18h31
  2. Réponses: 2
    Dernier message: 27/01/2014, 10h42
  3. Réponses: 5
    Dernier message: 12/09/2005, 17h34
  4. Réponses: 2
    Dernier message: 12/01/2005, 23h08
  5. [C#] Comment savoir si on est logué ou pas?
    Par pc152 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 22/05/2004, 09h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo