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 :

fonction qui renvoie le type d'une variable


Sujet :

C++

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2011
    Messages : 3
    Points : 4
    Points
    4
    Par défaut fonction qui renvoie le type d'une variable
    slt,
    je recherche une fonction qui renvoie le type d'une variable???
    Merci davance....

  2. #2
    En attente de confirmation mail
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Octobre 2010
    Messages
    501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 501
    Points : 1 060
    Points
    1 060
    Par défaut
    Bonjour,

    Sous gcc il y a bien typeof mais il faudrait donner plus de précisions pour savoir si ça correspond au besoin.

  3. #3
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Points : 410
    Points
    410
    Par défaut
    Bonjour,

    Citation Envoyé par dgwabo Voir le message
    je recherche une fonction qui renvoie le type d'une variable?
    [MODE FANATIQUE ON]Ce n'est pas bien ![MODE FANATIQUE OFF]
    Tu essaie sans doute d'enfreindre l'un de ces deux grands principes propres au C++ :
    1. Le typage fort :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int i =4;
    i = "toto"; // <<< INTERDIT EN C++
    2. Un principe fondamental de l'orienté objet, à savoir qu'on ne doit surtout pas savoir quel est le type réel des pointeurs et références qu'on manipule à partir du moment où on est certain qu'il s'agit d'un descendant du type que l'on croit manipuler.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Forme& maForme = recupereforme();
    if (maForme is typeof Carre) // <<< INTERDIT EN C++
    Ton problème n'est donc pas là où tu crois. Il est sans doute dans ton modèle de donnée.

    [EDIT]Après, je n'ai pas dit que ce n'est pas possible, j'ai dit que ce n'est pas bien, et qu'à moins que tu sois en train de bidouiller un code vieux de 10 ans sur lequel tout refactoring est impossible, tu devrais essayer de résoudre ton vrai problème et non-pas celui pour lequel tu pose la question.

    [TROLL]
    Oui, je viens de dire que la reflexion (et donc le Java), c'est le mal.
    J'assume.
    [/TROLL]
    [/EDIT]

    Courage

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 576
    Points : 1 528
    Points
    1 528
    Par défaut
    dynamic_cast peut peut être t'aider.
    Enfin, non, ça t'aidera pas parce que comme l'a dit Feriaman:
    Ton problème n'est donc pas là où tu crois. Il est sans doute dans ton modèle de donnée.
    Mais bon, ça peut toujours servir à d'autre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Panda* p = dynamic_cast<Panda*>(truc);
    if ( p != NULL )
      // truc est un Panda en fait.
    else
      // truc etait pas un Panda :(
    Sinon y'a la même sans les pointeurs qui throw un bad_cast exception.
    La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer. - Antoine de Saint-Exupéry

  5. #5
    Membre averti
    Homme Profil pro
    Analyse système
    Inscrit en
    Novembre 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 227
    Points : 311
    Points
    311
    Par défaut
    Il existe en C++ un mécanisme pour connaitre le type de classe utilisée en cours d'exécution, c'est le RTTI (Run-Time Type Information), il s'agit de type_info et type_id.
    Stroustrup en parle Chapitre 15.4 3ième édition.

  6. #6
    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
    Type statique ou dynamique ? Informations sur les types (dynamiques et statiques) et conversions

    Boost.Typeof

    En C++0x, auto, decltype

  7. #7
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Points : 410
    Points
    410
    Par défaut
    Citation Envoyé par andnicam Voir le message
    Il existe en C++ un mécanisme pour connaitre le type de classe utilisée en cours d'exécution, c'est le RTTI (Run-Time Type Information), il s'agit de type_info et type_id.
    Stroustrup en parle Chapitre 15.4 3ième édition.
    Je rejoins mes co-repondeur sur le fait qu'il existe des mécanismes que l'on peut utiliser pour connaitre un type.

    Mais quand un débutant dans un projet naissant te demande : "comment connaitre le type d'une variable", c'est que son problème est ailleurs.

    Par ailleurs, je pense qu'on est tous d'accord pour dire qu'il faut absolument éviter des choses comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void methode (Forme& forme)
    {
    	if (forme type of Carre) { /*dessine un Carré*/ }
    	else if (forme type of Rond) { /*dessine un Rond*/ }
    	else if (forme type of Triangle) { /*dessine un Triangle*/ }
    	else if (forme type of Hexagone) { /*dessine un Hexagone*/ }
    	else if (forme type of Potato) { /*dessine un Potato*/ }
    }
    J'ai bossé 3 ans sur un projet professionnel dont l'architecture était basée sur les RTTI et sur ce type de "switch", je vous dit pas l'horreur que c'était.

    Alors peut-être que certaines rockstars de l'OO savent utiliser la reflexion et les typeof comme des pros sans nuire à leurs modèles, mais certainement pas un débutant.

    Pour répondre à la question :
    voila mon reel probleme:
    dans dev-c++, j'ai ecrit une procedure qui dessine un tableau de n cases defini; ensuite l'utilisateur est invite a entrer des entiers dans chaque case du tableau, la procedure calcule la somme des elements du tableau et la lui renvoie. malheureusement par megarde, l'utilisateur peut plutot taper une lettre qui n'est pas un entier!!! je voudrai donc controler cela, afin que si ce n'est pas un entier qui entre, la procedure efface ce qu'il a entre et lui invite a reessayer.
    je declare un tableau de caracteres et chaque fois qu'un caractere est lu, je teste si son type est entier; si ce n'est pas le cas, l'utilisateur doit recommencer.
    comment dois je alors tester le type du caractere???
    Je dirais :
    1. Un forum cela ne marche pas avec les MP. Cela marche avec les topics.
    2. Il faut que tu comprenne ce que c'est qu'un "type". Et en particulier, il faut que tu comprennes la différence qu'il y a entre le type d'une variable et son contenu. Voici des exemples :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int i = 4; // Ceci est un entier
    int i = 'a'; // ceci est aussi un entier
    std::string s1 = "toto"; //ceci est une chaine
    std::string s1 = "4"; //ceci est une chaine
    Si les 4 lignes ci-dessus ne sont pas claires, je te propose de relire le chapitre "variables" de ton cour de C++.

    Une fois que ce sera fait, je te propose de te renseigner sur

Discussions similaires

  1. fonction qui renvoie le type d'une variable
    Par alves1993 dans le forum Débuter
    Réponses: 4
    Dernier message: 30/04/2014, 01h01
  2. [Débutant] Fonction qui renvoie un nombre de paramètres variables.
    Par abel413 dans le forum MATLAB
    Réponses: 7
    Dernier message: 24/07/2013, 09h29
  3. Ecrire une fonction qui renvoie une structure de données (type)
    Par dinosaure dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 15/09/2008, 20h59
  4. Réponses: 15
    Dernier message: 30/11/2007, 15h36
  5. Réponses: 8
    Dernier message: 24/10/2006, 16h50

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