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 :

enum class et value


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Enseignant
    Inscrit en
    Septembre 2011
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 43
    Par défaut enum class et value
    Bonjour,


    Alors que je travaille sur une librairie permettant de manipuler des grands nombres (exercice totalement à but pédagogique dans le but de maîtriser le C++ dont le C++11) j'ai eu le malheur d'écrire cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    enum class Sign : char { NUL = 0, PLUS = 1, MINUS = -1 };
    Tout va bien jusqu'à ce que je décide de programmer le produit de deux signes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sign product(Sign a, Sign b)
    J'aimerai donc utiliser les valeurs des Sign et non pas leur signification.

    Si PLUS = 1 et MINUS = -1 alors le produit de deux signes me donne directement le signe du résultat.

    Mais comment récupérer 1 ou -1 (sans faire des if dans tous les sens, car cela, je sais faire)

    Déjà est ce possible ?

    Si oui, avez vous une piste ?

    En vous remerciant !

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Salut,

    tu peux utiliser static_cast. Mais si tu t'intéresses à la valeur spécifique d'un enum, un enum fortement typé n'est peut-être simplement pas la bonne solution.
    Dans ce cas, avec simplement 3 casts tu peux retourner ton résultat return static_cast<Sign>(static_cast<char>(a) * static_cast<char>(b)); puisque tu es sûr que les solutions appartiennent à [-1, 1] et a une représentation dans l'enum.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre confirmé
    Profil pro
    Enseignant
    Inscrit en
    Septembre 2011
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 43
    Par défaut
    Oki. Merci de ta réponse.

    Je vais alors revoir mon travail !

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Attention, char n'est pas forcément signé.
    Le plus petit type pour les nombres signés est signed char ou bien std::int_least8_t.

  5. #5
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Ce ne serait pas plutôt std::int8_t que std::int_least8_t, qui a "au moins" une taille de 8 mais donc potentiellement plus ?

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Citation Envoyé par Bktero Voir le message
    Ce ne serait pas plutôt std::int8_t que std::int_least8_t, qui a "au moins" une taille de 8 mais donc potentiellement plus ?
    Justement std::int8_t n'existe pas si le processeur ne peut pas gérer les octets alors que std::int_least8_t existe toujours et est donc le plus petit.
    Par exemple le MSP320 on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sizeof(char)=sizeof(short)=sizeof(int)=sizeof(std::int_least8_t)=sizeof(std::int16_t)=1
    // ils font tous 16 bits, la plus petite unité adressable d'où sizeof=1
    sizeof(long)=sizeof(std::int32_t)=2 // 32 bits
    sizeof(long long)=4 // 64bits

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

Discussions similaires

  1. Erreur C2332 enum class
    Par mulfycrowh dans le forum Visual C++
    Réponses: 5
    Dernier message: 26/09/2013, 06h18
  2. Réponses: 9
    Dernier message: 10/12/2010, 13h55
  3. Réponses: 1
    Dernier message: 29/08/2006, 16h29
  4. declarer un enum dans une classe
    Par d-a-v-e dans le forum C++
    Réponses: 15
    Dernier message: 10/02/2006, 00h46
  5. Réponses: 17
    Dernier message: 16/10/2005, 21h01

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