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 :

[template] - declaration d'un template de structure dans une map


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3
    Par défaut [template] - declaration d'un template de structure dans une map
    Bonjour,

    Voila mon souci : je declare une structure dans laquelle un des parametres peut avoir differents types, donc j'utilise un template :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    template <typename T>
    		struct tInfos
    		{
    			string sStr;
    			T tType;  // il peut y avoir differents types pour ce parametre
    		};
    ensuite, j'ai besoin de creer une map qui va contenir ces structures que je viens de declarer. Je fais donc comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef map<int,tInfos> m_TMyMap;
    Mais ca ne passe pas a la compilation, ca me dit que le 2eme argumemt de ma map est incorrect...

    j'ai essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef map<int,template<T>tInfos<T>> m_TMyMap;
    , mais la ca me dit que le type "T" est inconnu...

    Est-ce quelqu'un voit de quelle maniere je dois declarer ma map?

    Merci davance!

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    Hum... tu es obligé de spécifier le type T de ta structure.
    Tu ne peux pas avoir une map de tInfos de n'importe quel type. Tu dois donc instancier ton template.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    typedef map<int, tInfos<double> > m_MyMapDouble;
    C'est un problème classique du GotW.
    http://www.gotw.ca/gotw/079.htm

  3. #3
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    tInfos est une structure template, faut préciser le type. Si ton idée était de faire un template typedef alors sache que c'est pas possible pour l'instant en C++. (ça le sera avec la prochaine norme).

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 153
    Par défaut
    Pour ce genre de probleme, j'utilise souvent la solution suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    struct tInfosBase
    {
       string sStr;
    };
     
    template <typename T>
    struct tInfos : public tInfosBase
    {
       T tType;  // il peut y avoir differents types pour ce parametre
    };
     
    typedef map<int,tInfosBase*> TMyMap;
    Mais attention, tu manipules desormais des pointeurs de tInfosBase.
    --
    Jérémie

  5. #5
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Pour contourner ce manque je préfére faire du template rebinding.. Quitte à me trimballer un ::type disgracieux.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3
    Par défaut
    @Goten : mon but, c'est de faire une map qui contiendra des structures, dans lesquelles le type d'un des paramètres peut varier. Toutes les structures ne contiendront pas forcément le même type.
    Je veux pouvoir avoir dans ma map :
    • une structure avec le type int
    • une srtucture avec le type double
    • une structure avec le type...


    Je ne veux donc pas déclarer quelque chose de ce genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef map<int, tInfos<double> > m_MyMapDouble;
    ça ne correspond pas à ce que je veux faire...

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

Discussions similaires

  1. manipulation de template dans une map
    Par Kaamui dans le forum Langage
    Réponses: 3
    Dernier message: 03/03/2012, 15h21
  2. Declarer une structure dans une classe
    Par sub-0 dans le forum Débuter
    Réponses: 5
    Dernier message: 01/11/2009, 17h03
  3. Declarer une structure dans une methode
    Par Invité dans le forum Débuter
    Réponses: 2
    Dernier message: 08/12/2008, 22h59
  4. [POO] Insertion d'un template dans une map
    Par JSmey dans le forum Langage
    Réponses: 6
    Dernier message: 27/11/2008, 11h50
  5. Réponses: 12
    Dernier message: 29/10/2008, 08h40

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