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 :

[POO] Insertion d'un template dans une map


Sujet :

Langage C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Points : 20
    Points
    20
    Par défaut [POO] Insertion d'un template dans une map
    Bonjour,

    J'ai actuellement trois classes comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class A
    {
    };
     
    class B : public A
    {
        double x;
    };
     
    class C : public A
    {
        int y;
    };
    J'ai une autre classe contenant une map :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class AList
    {
         std::map<double, A>mymap;
    }
    J'aimerais qu'en fonction des cas ma map se remplisse avec des objets de la classe B ou de la classe C.

    Y a-t-il moyen d'intégrer dans cette std::map un objet template? Si oui, comment.

    Je vous remercie d'avance pour toute idée, réponse.

  2. #2
    screetch
    Invité(e)
    Par défaut
    il faudra passer par des pointeurs pour beneficier du polymorphisme

  3. #3
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Ce que veut dire screetch :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class AList
    {
         std::map<double, A * >mymap;
    }
    Et ne pas oublier la procédure de delete des pointeurs lorsque l'on vide la map
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Points : 20
    Points
    20
    Par défaut
    Merci pour vos réponses.

    Effectivement le passage de pointer résoud ce problème.

    Mais d'une manière générale, est-ce que l'idée est possible?

    Et comment l'implémenter?

  5. #5
    screetch
    Invité(e)
    Par défaut
    il existe un moyen assez tordu, c'est de mettre une "union" (dans boost::variant par exemple) qui peut etre soit un B soit un C.
    Mais il faut savoir que dans ce cas, tu as perdu le type reel de B ou C apres la compilation et que tu dois le retrouver par d'autres methodes. Ce que je veux dire par la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class A; class B : A; class C : A;
     
    void add(A* a)
    {
      map.insert(std::make_pair(a->value(), a));
    }
     
    int main()
    {
      B b;
      C c;
      add(&b); //On a perdu le typee exact de b a cause du cast vers un pointeur vers A; a la compilation, il sera impossible de retrouver ce type
    }
    meme en utilisant une union, tu perds a la compilation le type exact, et tu vas devoir utiliser un test partout pour ssavoir si tu as un objet B ou C.

    La maniere correcte de faire est de regrouper toute les fonctions dont tu as besoin dans A, sans jamais les mettre dans B ou C (ou alors elles sont virtuelles dans A et implémentées dans B et C) ce qui fait que la classe A te permet d'effectuer toute les operations sans savoir si c'etait en fait un B ou un C

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Points : 20
    Points
    20
    Par défaut
    en effet cela semble un peu tordu, mais je comprends bien le principe. Merci de cette réponse.

  7. #7
    Alp
    Alp est déconnecté
    Expert éminent sénior

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Tu veux que ta map pour une _instance donnée de AList_ puisse contenir à la fois des B et des C, ou bien que pour une _instance donnée de AList_, ta map puisse contenir soit des B, soit des C mais pas les deux ?

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. Réponses: 8
    Dernier message: 30/07/2009, 13h19
  3. html template, insertion de pages html dans une page html
    Par burlingtoil dans le forum Débuter
    Réponses: 0
    Dernier message: 24/08/2008, 22h18
  4. problème avec insert dans une map
    Par LePetitBricoleur dans le forum C++
    Réponses: 3
    Dernier message: 01/11/2007, 11h52
  5. problème d'insertion de données dans une map
    Par kifouillou dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 21/02/2007, 10h10

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