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

Boost C++ Discussion :

opérateur de cast bool.


Sujet :

Boost C++

  1. #1
    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
    Par défaut opérateur de cast bool.
    Bonjour,
    Dans différente bibliothèque Boost, je trouve la définition suivante (ou quelque chose d'équivalent) pour un opérateur évaluant en bool:
    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
    class ClasseBoost
    {
    protected/private:
       typedef void (ClasseBoost::*safe_bool)();
       void dummy();
     
    public:
       operator safe_bool() const {
          if(vrai){
             return &ClasseBoost::dummy;
          }
          else{
             return 0;
          }
       }
    };
    Pourquoi passer par ce genre de type interne en lieu et place d'une surcharge de l'opérateur bool:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class ClasseBoost
    {
    public:
       operator bool() const { ...}
    }

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Parce que bool est un type primitif, donc une conversion implicite vers bool signifie une conversion implicite vers tous les types primitifs compatibles comme int.

    Et donc on peut écrire
    ClasseBoost c;
    c + 42;

  3. #3
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  4. #4
    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
    Par défaut
    Merci!

  5. #5
    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
    Par défaut
    Bonjour JolyLoic,
    Si je comprend bien l'article, la redéfinition de l'opérateur !, est aussi une bonne solution dans ce cas, avec :
    -> l'utilistation de if(!!obj) pour atteindre le test,
    -> le fait que if(!!obj1==!!obj2) (avec obj1 et obj2 deux instances de deux classes différentes) est suffisamment tordu pour lever l'ambigüité de if(obj1==obj2) (qui relève de l'erreur de conception qui peut passer inaperçue en surchargeant simplement un cast bool).

    Les seules réserves sont:
    -> Ca fait bidouillage (~trick)
    -> C'est - naturel à écrire,
    -> c'est à privilégier en interne.

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    La technique du pointeur de fonction membre marche impec, pas besoin d'aller plus loin à mon avis.

  7. #7
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Je pense globalement comme Loufoque, même si à mon avis, le mieux est encore les opérateurs de cast explicites du C++0x qui ont été fait exprès pour ça.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  8. #8
    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
    Par défaut
    Citation Envoyé par loufoque Voir le message
    La technique du pointeur de fonction membre marche impec, pas besoin d'aller plus loin à mon avis.
    C'est pas tant pour aller plus loin que pour bien comprendre l'article. Connaître une technique c'est bien, la comprendre c'est plus rafraîchissant pour les neurones

    D'ailleurs, sur la technique du pointeur membre, l'article mentionne quand même une réserve: la redéfinition des opérateurs == et !=...

    Citation Envoyé par JolyLoic Voir le message
    Je pense globalement comme Loufoque, même si à mon avis, le mieux est encore les opérateurs de cast explicites du C++0x qui ont été fait exprès pour ça.
    Certainement, mais mon questionnement est venu en décortiquant des implémentations dans les bibliothèques boost.

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

Discussions similaires

  1. Opérateurs logiques - Algèbre de Boole
    Par me784 dans le forum Mathématiques
    Réponses: 12
    Dernier message: 10/10/2008, 20h13
  2. Surdéfinition de l'opérateur de cast (void *)
    Par Thierry Chappuis dans le forum C++
    Réponses: 4
    Dernier message: 07/12/2006, 11h21
  3. [Boole] Opérateur logique
    Par LhIaScZkTer dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 31/10/2006, 10h02
  4. [imprecis]Réaliser a^n avec seulement l'opérateur d'addition
    Par Amon dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 08/11/2002, 22h22

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