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

Langage C++ Discussion :

Les template typedefs existent ils ?


Sujet :

Langage C++

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2011
    Messages : 51
    Points : 59
    Points
    59
    Par défaut Les template typedefs existent ils ?
    Bonjour,

    J'essaye de comprendre certaines notions de généricité en C++ (même si je ne vois pas toujours leurs intérêts...) et je viens donc lire récemment un tutoriel sur le template rebinding : http://alp.developpez.com/tutoriels/templaterebinding/

    J'ai compris comment fonctionne le template rebinding (je ne sais pas par contre si c'est souvent utile...) mais dans le tuto il est dit que les template typedefs n'existent pas en C++.
    Vu que le tutoriel date un peu (2007) et que je ne trouve pas de réponses sur le web je souhaiterai savoir si maintenant les template typedefs existent.



    PS: Je préfère vous demander conseil avant : j'aimerais aussi lire ce tutoriel sur la metaprogrammation : http://loulou.developpez.com/tutoriels/cpp/metaprog/
    Mais vu qu'il date de 2004 je me demande si c'est toujours d'actualité ? Ou si je perds mon temps en lisant. Quelqu'un pour m'aider ?

  2. #2
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    Bonjour,

    Oui les template typedef sont maintenant disponibles en C++11 ! Hourra !
    Par contre elles ne sont implémentées que sur les compilateurs très récents, et encore pas sur tous... (pas sur visual studio par exemple)

    L'article à l'époque prévoyait une syntaxe dans ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    template <typename T>
    struct S
    {
    	template <typename U> typedef S<U> OtherType;
    };
     
    // On y accèderait ainsi
    S<int>::OtherType<double> sd; // sd est de type S<double>
    Mais finalement la syntaxe choisie ne fait pas appel à typedef mais à l'instruction "using". On n'appelle plus ça des "template typedef" mais des "template alias"
    Il faut écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    template <typename T>
    struct S
    {
       template <typename U> 
       using OtherType = S<U>;
    };
     
    // On y accèderait ainsi
    S<int>::OtherType<double> sd; // sd est de type S<double>
    Note que using peut s'appliquer partout où un typedef est valide et, de fait, peut remplacer entièrement typedef en C++11.

    On peut par exemple écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    using MYINT = int;
    using HANDLE = void*;
    using funcptr =  void(*)(int, int); // plus lisible que le typedef correspondant !
     
    template <typename T>
    class my_vector
    {
    public:
       using iterator = T*;
       using value_type = T;
    };

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2011
    Messages : 51
    Points : 59
    Points
    59
    Par défaut
    Ah oui effectivement la syntaxe est bien mieux je trouve.
    Et du coup plus besoin de template rebinding.

    Et bien merci pour cette réponse

  4. #4
    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 620
    Points
    15 620
    Par défaut
    En complément : Nouvelles fonctionnalités du C++11 - Alias de templates. On peut également les utiliser avec des types non template, à la place de typedef (à terme, cela pourrait remplacer complètement les typedef). C'est dans gcc à partir de 4.7

    Pour le second article, oui, il est très intéressant à lire, d'autant plus si tu vois pas forcement l'intérêt de la méta prog

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2011
    Messages : 51
    Points : 59
    Points
    59
    Par défaut
    Merci, je vais lire tout ça alors !
    Et je met le sujet en résolu bien sûr.

  6. #6
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Salut,

    En fait, le template rebinding est une technique qui est appelée à pallier certains manques que la nouvelle norme tente de combler.

    La nouvelle norme nous permet d'écrire plus facilement des algorithmes qui tiennent du template rebinding, mais le principe reste toujours le même.

    En plus, il faut savoir que, comme la nouvelle norme est "toute récente", le nombre de compilateurs qui supportent l'ensemble des opportunités qu'elle offre reste restreint, et que tu risques malgré tout de te trouver face à un compilateur qui... ne supporte pas toutes les possibilités de C++11.

    L'idéal est donc de ne pas se dire "plus besoin de template rebinding" mais bien de se dire "avec un peu de chance, je pourrai faire sans", tout en gardant cette technique sous la main pour le cas où "tu n'aurais pas de chance"

    Pour ce qui concerne l'article sur la méta programmation, il a beau dater un peu, il reste tout à fait d'actualité (meme si la nouvelle norme nous apporte certaines facilités) et te permettra d'avoir une idée plus que correcte de l'utilité que peut avoir la méta programmation.

    Mais, en deux mots, il te permet de te rendre compte qu'il est parfois possible de "laisser travailler le compilateur pour nous" et donc de s'éviter d'avoir à recoder sans cesse la même chose
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 12/08/2012, 13h10
  2. Réponses: 5
    Dernier message: 04/11/2010, 11h01
  3. Réponses: 15
    Dernier message: 28/08/2010, 00h09
  4. Réponses: 22
    Dernier message: 03/03/2009, 16h47
  5. connaitre les bases qui existes
    Par nycagi dans le forum Administration
    Réponses: 13
    Dernier message: 08/06/2004, 12h29

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