Précédent   Forum du club des développeurs et IT Pro > C et C++ > C++ > Langage
Langage Langage C++, Programmation Orientée Objet, Templates, etc. Avant de poster : FAQ C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 10/12/2012, 15h31   #1
SalutAVous
Futur Membre du Club
 
Homme
Étudiant
Inscription : décembre 2011
Messages : 34
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 : 34
Points : 18
Points : 18
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 ?
SalutAVous est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2012, 15h58   #2
Arzar
Membre Expert
 
Inscription : mai 2008
Messages : 937
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 937
Points : 1 783
Points : 1 783
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;
};
Arzar est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 10/12/2012, 16h14   #3
SalutAVous
Futur Membre du Club
 
Homme
Étudiant
Inscription : décembre 2011
Messages : 34
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 : 34
Points : 18
Points : 18
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
SalutAVous est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2012, 16h34   #4
gbdivers
Responsable C++

 
Homme Guillaume Belz
Biochimiste
Inscription : novembre 2008
Messages : 5 314
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Belz
Âge : 37
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Biochimiste
Secteur : Santé

Informations forums :
Inscription : novembre 2008
Messages : 5 314
Points : 19 509
Points : 19 509
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
__________________
Vous souhaitez rejoindre l'équipe de bénévoles qui fait vivre Developpez (traduction, rédaction, modération) ? Contactez moi par MP.

Ma page personnelle avec la liste de mes articles - Mon blog sur le C++, Qt et les GPU.

Je suis régulièrement sur le chat pour les questions C++/Qt.

Apprendre Qt 5 : vidéos d'installation (YouTube), extraites du livre Créer des applications avec Qt 5.
gbdivers est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/12/2012, 16h47   #5
SalutAVous
Futur Membre du Club
 
Homme
Étudiant
Inscription : décembre 2011
Messages : 34
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 : 34
Points : 18
Points : 18
Merci, je vais lire tout ça alors !
Et je met le sujet en résolu bien sûr.
SalutAVous est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2012, 22h55   #6
koala01
Modérateur
 
Avatar de koala01
 
Philippe Dunski
Inscription : octobre 2004
Messages : 8 611
Détails du profil
Informations personnelles :
Nom : Philippe Dunski
Âge : 41

Informations forums :
Inscription : octobre 2004
Messages : 8 611
Points : 13 261
Points : 13 261
Envoyer un message via MSN à koala01 Envoyer un message via Skype™ à koala01
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
je ne répondrai à aucune question technique par E-mail, message visiteur ou message privé
Vous avez obtenu votre réponse pensez au bouton en bas de page
koala01 est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 05h53.


 
 
 
 
Partenaires

Hébergement Web