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 :

Guru of the Week n° 35 : le mot-clé typename [Tutoriel]


Sujet :

C++

  1. #1
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 617
    Points
    15 617
    Par défaut Guru of the Week n° 35 : le mot-clé typename
    « Qu'est-ce qu'un nom (de type) ? »
    Voici un exercice qui démontre pourquoi et comment utiliser typename, en utilisant un idiome courant dans la bibliothèque standard.

    Guru Of the Week n° 35 : le mot-clé typename

    Connaissiez-vous cette utilisation de typename ?

    Retrouver l'ensemble des Guru of the Week sur la page d'index.

  2. #2
    Membre éclairé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2007
    Messages : 373
    Points : 765
    Points
    765
    Par défaut
    Pour ceux qui, comme moi, n'ont pas de culture et qui souhaitent tout de même comprendre la "plaisanterie", voici une citation de Shakespeare (Roméo et Juliette) :
    Citation Envoyé par Juliet
    What's in a name? That which we call a rose
    By any other name would smell as sweet.
    ... dont traduction qui semble faire référence est :
    Citation Envoyé par Juliette
    Qu'y a-t-il dans un nom ? Ce que nous appelons rose
    Par n'importe quel autre nom sentirait aussi bon.
    Pour les non anglophones : "smell sweet" = "sentir bon", et "smell awfull" = "sentir mauvais". Avec ça, un peu d'entrainement ou un compilateur si on est trop fatigué, on est armé pour comprendre

    Merci pour l'article sinon !

    La première situation dans laquelle j'ai été contraint d'utiliser ce mot clé était typiquement pour une fonction agissant sur un conteneur dont le type est un paramètre template :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    template<class container>
    void une_fonction(C& c) {
        typename container::iterator iter;
        for (iter = c.begin(); iter != c.end(); ++iter) {
            // ...
        }
    }

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Attention : la traduction d'idiom, tel qu'utilisé, est idiotisme, pas idiome.

    Le terme étant ambigu, je suggère expression syntaxique.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Je rappelle également la sympathique syntaxe ::template...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 87
    Points : 111
    Points
    111
    Par défaut
    le plus vicieux étant le template de template où il faut obligatoirement utiliser le mot clé 'class'.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Le C++, temple du vice.

    Pointeurs & templates = Sodome et Gomorrhe

  7. #7
    Membre éclairé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2007
    Messages : 373
    Points : 765
    Points
    765
    Par défaut
    Citation Envoyé par Lightness1024 Voir le message
    le plus vicieux étant le template de template où il faut obligatoirement utiliser le mot clé 'class'.
    D'un côté c'est logique puisqu'un type primitif ne peut pas être template : on a nécessairement affaire à une classe (ou une structure, mais dans le fond c'est la même chose).

  8. #8
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 617
    Points
    15 617
    Par défaut
    Citation Envoyé par Lightness1024 Voir le message
    le plus vicieux étant le template de template où il faut obligatoirement utiliser le mot clé 'class'.
    Tu parles de ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    template <typename T, 
    template <typename ELEM> class CONT = std::deque > // ok
     
    template <typename T, 
    template <typename ELEM> typename CONT = std::deque> // erreur
    Perso, ça me semble pas ambiguë, on a affaire avec une déclaration d'une classique classe template :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    template <typename ELEM> class CONT

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 87
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par gbdivers Voir le message
    Tu parles de ça ?....
    oui tout a fait. bien vu pour l'interpretation. en effet vu sous cet angle c'est carrément plus compréhensible. apres pourquoi struct est interdit ici est plus louche du coup.

Discussions similaires

  1. Guru of the Week n° 33 : le mot clé inline
    Par gbdivers dans le forum C++
    Réponses: 14
    Dernier message: 25/06/2012, 11h12
  2. Guru of the Week 104
    Par gbdivers dans le forum C++
    Réponses: 15
    Dernier message: 25/04/2012, 15h27

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