Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Nouveau Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2011
    Messages
    43
    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 : 43
    Points : 31
    Points
    31

    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 Expert

    Inscrit en
    mai 2008
    Messages
    1 010
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 1 010
    Points : 2 203
    Points
    2 203

    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 :
    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 :
    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 :
    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
    Nouveau Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2011
    Messages
    43
    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 : 43
    Points : 31
    Points
    31

    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 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : novembre 2008
    Messages : 5 308
    Points : 15 141
    Points
    15 141

    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
    Nouveau Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2011
    Messages
    43
    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 : 43
    Points : 31
    Points
    31

    Par défaut

    Merci, je vais lire tout ça alors !
    Et je met le sujet en résolu bien sûr.

  6. #6
    Modérateur
    Avatar de koala01
    Profil pro Philippe Dunski
    Inscrit en
    octobre 2004
    Messages
    9 756
    Détails du profil
    Informations personnelles :
    Nom : Philippe Dunski
    Âge : 42

    Informations forums :
    Inscription : octobre 2004
    Messages : 9 756
    Points : 17 265
    Points
    17 265

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •