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 :

Trouver le Type d'une classe template dynamiquement ?


Sujet :

Langage C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Trouver le Type d'une classe template dynamiquement ?
    Mon problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    class Mere
    {
      public:
       Mere() { ;} // default ctor
    };
    template<class TYPE>
    class Fille : public Mere // fille derive de Mere
    {
       TYPE i;
      public:
       Fille() { ; } // default ctor
       Fille(const TYPE& j) : i(j) // ctor : copy j dans i
      { ; }
     
      Fille& operator=(const Fille& f) { i = f.i;} // definition de l'opérateur =
    };
    int main(int argc, char *argv[])
    { Fille<int>* ptr1;
      ptr1 = new Fille<int>(1);
     
     
      //.... quelque part dans le programme ....
      Mere* ptr2 = ptr1; // ptr1 et ptr2 pointent sur le même objet Fille<int>
     
      ptr2 = new Fille<???>(); // cree un nouvel objet Fille<int> ????
     
      (*ptr2) = (*ptr1);         // use operator = de la classe Fille<int>
    apriori ptr2 ne connait pas le type de ptr1, mais si on veut dupliquer
    les données, il doit connaitre le type utilisé dans le patron.

    Mon problème c'est par quoi remplacer les <???>. Est ce que c'est
    possible ?

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (*ptr2) = (*ptr1);         // use operator = de la classe Fille<int>
    je ne pense pas que ce soit la manière la plus élégante. Tu utilises ta classe selon une sémantique de référence, et là, tu la copies selon une sémantique de valeur. Pour copier ta classe, oblige plutot la classe fille à implémenter une fonction membre virtuelle clone().
    http://c.developpez.com/faq/cpp/?pag...es#CLASS_clone
    et pense au destructeur virtuel:
    http://c.developpez.com/faq/cpp/?pag...UCTEUR_virtuel

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Merci, ce doit être ce qu'il me faut.
    Pour les destructeurs virtuels c'était déja failt.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Août 2003
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 247
    Points : 276
    Points
    276
    Par défaut Re: Trouver le Type d'une classe template dynamiquement ?
    Citation Envoyé par Serge Iovleff
    Trouver le Type d'une classe template dynamiquement ?
    Déjà, ça c'est pas beau. C'est comme si tu demandais comment savoir dynamiquement si une variable est de type int ou float. En C++ les types sont statiques, donc tout le travail sur les types doit se faire à la compilation. Une identification dynamiques des types est possible mais pas dans ton cas. (Tu n'en as de toutes façon pas besoin.)


    Citation Envoyé par Serge Iovleff
    Mon problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      Mere* ptr2 = ptr1;
      ptr2 = new Fille<???>(); // cree un nouvel objet Fille<int> ????
    Ce morceau de code ne me plait pas...
    Tu initialise ptr2 pour écraser sa valeur juste après. Tu voulais faire quelque chose de particulier ?


    Citation Envoyé par Serge Iovleff
    apriori ptr2 ne connait pas le type de ptr1, mais si on veut dupliquer
    les données, il doit connaitre le type utilisé dans le patron.

    Mon problème c'est par quoi remplacer les <???>. Est ce que c'est
    possible ?
    Certes non, ce pauvre ptr2 ne connais pas le type de ptr1. Mais toi oui, toi tu connais parfaitement le type de ptr1. Et pour cause, c'est toi même qui a explicatement déclaré ptr1 comme Fille<int>. La solution à ton problème est donc: remplace ??? par int.


    use operator = de la classe Fille<int>
    En revanche, ce commentaire pose problème. Pourquoi diantre voudrais-tu que le compilateur comprenne que tu souhaite enfait appeler la fonction operator= définie dans Fille alors que *ptr2 est de type Mere. Le compilateur ne va pas comprendre...


    Réfléchis bien à ce que tu souhaites obtenir. J'ai l'impression que tout n'est pas bien clair dans ta tête...

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 02/12/2010, 11h36
  2. Réponses: 5
    Dernier message: 01/04/2008, 18h47
  3. Réponses: 7
    Dernier message: 22/02/2007, 16h57
  4. Déterminer le type d'une class dérivée
    Par LDDL dans le forum MFC
    Réponses: 3
    Dernier message: 10/12/2004, 17h36
  5. [Debutant][Collection] Création d'un vecteur de type d'une classe
    Par Tao® dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 22/04/2004, 17h06

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