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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    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 : 62
    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
    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 averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    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 averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

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

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