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 :

template<class> et template<typename>


Sujet :

C++

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut template<class> et template<typename>
    Bonjour,

    J'ai lu quelques trucs sur les templates, mais à chaque fois les exemples sont composés soit de "template<class>" soit de "template<typename>" et jamais ils exempliquent la différences :s

    Est-ce que quelqu'un pourrai m'en dire plus?



    Merci beaucoup,

    A bientôt

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    Y'a justement pas de différence: "class" et "typename" sont ici synonymes.

  3. #3
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Dans ce cadre.
    Après , tu aura quelque cas ou dans le corps même des template ( cad pas dans la liste des types) typename aura un sens en plus.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  4. #4
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Les deux font la même chose ici.

    Pour des raisons historiques (il n'existait que ça avant) le mot clef class peut être utilisé.

    On s'est aperçu que ce mot clef ne reflétait pas la réalité puisque les types primitifs pouvait aussi être utilisés comme argument template. Donc on a introduit plus tard le mot clef typename qui s'y prête mieux.

    Class a tout de même été conservé pour éviter que trop de code soit réécrit.

  5. #5
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par NiamorH Voir le message
    Les deux font la même chose ici.
    Exact.

    Pour des raisons historiques (il n'existait que ça avant) le mot clef class peut être utilisé.

    On s'est aperçu que ce mot clef ne reflétait pas la réalité puisque les types primitifs pouvait aussi être utilisés comme argument template. Donc on a introduit plus tard le mot clef typename qui s'y prête mieux.
    Non. On a eu besoin d'un mot cle a un autre endroit (l'autre utilisation de typename pour indiquer qu'un nom dependant est un identificateur de type) et on a permis de l'utiliser aussi a la place de class lors de la declaration de templates.

  6. #6
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Pour terminer, lorsque tu travailles en équipe, utiliser class au lieu de typename peut aider à faire comprendre que les types passés en paramètres de ton modèle seront des types créés par des "utilisateurs", et non pas des types primitifs, alors que typename indique que cela peut être un type "quelconque".

  7. #7
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Alp Voir le message
    Pour terminer, lorsque tu travailles en équipe, utiliser class au lieu de typename peut aider à faire comprendre que les types passés en paramètres de ton modèle seront des types créés par des "utilisateurs", et non pas des types primitifs, alors que typename indique que cela peut être un type "quelconque".
    Certains ont cette convention, d'autres utilisent systematiquement class, d'autres systematiquement typename. De toute maniere, je ne vois pas tellement ce que ca apporte. Ce qu'il faut (et qui sera en C++0X), c'est un systeme de concepts.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    C'était juste une question de curiosité.

    Merci beaucoup pour vos réponses

  9. #9
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Certains ont cette convention, d'autres utilisent systematiquement class, d'autres systematiquement typename. De toute maniere, je ne vois pas tellement ce que ca apporte. Ce qu'il faut (et qui sera en C++0X), c'est un systeme de concepts.
    Oui, c'est juste un indicateur qui n'est pas nécessaire à mon goût, car on peut déduire du contexte le fait que cela doive être un type créé par l'utilisateur ou non. Mais en effet, encore une fois, les concepts arriveront à point pour cela aussi.

  10. #10
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Non. On a eu besoin d'un mot cle a un autre endroit (l'autre utilisation de typename pour indiquer qu'un nom dependant est un identificateur de type) et on a permis de l'utiliser aussi a la place de class lors de la declaration de templates.
    Salut,

    j'ai revérifié sur C++ Templates : The Complete Guide d'où j'ai tiré ma réponse depuis mes souvenirs, je vous réécris l'extrait tel quel :
    For historical reasons, you can also use class instead of typename to define a type parameter. The keyword typename came relatively late in the evolution of the C++ language. Prior to that, the keyword class was the only way to introduce a type parameter, and this remains a valid way to do so.

    blablabla

    Semantically there is no difference in this context. So, even if you use class here, any type may be used for template arguments. However, because this use of class can be misleading (not only class types can be substituted for T), you should prefer the use of typename in this context. Note also that unlike class type declarations, the keyword struct cannot be used in place of typename when declaring type parameters.
    Je vois une chose dans mon post qui semble effectivement faux, c'est que j'emploi donc et on a l'impression, lorsqu'on me lit, que typename a été créé uniquement pour cette occasion, ce qui effectivement ne semble pas être le cas. Si l'erreur pointée était celle là je m'en excuse, mais hormis ça le reste de mes propos est conforme à ce que je lis dans ce livre.

  11. #11
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par NiamorH Voir le message
    Je vois une chose dans mon post qui semble effectivement faux, c'est que j'emploi donc et on a l'impression, lorsqu'on me lit, que typename a été créé uniquement pour cette occasion,
    C'est bien l'implication que je contestais.

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

Discussions similaires

  1. "Template" de classe métier
    Par gbraux dans le forum Design Patterns
    Réponses: 3
    Dernier message: 20/11/2007, 10h37
  2. [Template] Problème Classe Template
    Par gimpycpu dans le forum Langage
    Réponses: 7
    Dernier message: 23/05/2007, 05h10
  3. Méthode template dans classe non template ?
    Par shenron666 dans le forum Langage
    Réponses: 12
    Dernier message: 04/09/2006, 17h50
  4. Utilisation de templates et classe en PHP?
    Par wkd dans le forum Langage
    Réponses: 1
    Dernier message: 01/09/2006, 15h36
  5. Template et classe "amie" ?
    Par tintin72 dans le forum Langage
    Réponses: 21
    Dernier message: 11/07/2006, 22h50

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