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

C++ Discussion :

Fonction template pour copie polymorphe


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Par défaut Fonction template pour copie polymorphe
    Bonjour a tous,

    Une question pour savoir si ce genre de chose est réalisable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class Mere
    {
    public:
    /*
    ...
    */
    template<class T>
    T* getCopie( void ){ return  new T(*this);};
    }
    Afin que toutes les filles qui héritent de mère possèdent un getCopie qui retourne leur copie et que je puisse appeler via un fille->getCopie();

    Merci d'avance

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    template <class T>
    class Mere<T>
    {
    	T* getCopie( void ){ return  new T(*this);};
    };
     
    class Fille : Mere<Fille>
    {
    };

  3. #3
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Bonjour à toi,
    Ce n'est pas du tout une template qu'il te faut, mais un retour covariant.

    Lis donc dans la faq les questions de retour covariant et de copie polymorphe

    Par ailleurs, juste pour le style, makeCopy(), copy() ou encore clone() serait de meilleurs nom de fonctions. En effet, ce n'est pas un get, parce que la copie n'est pas une propriété de l'objet.

    La solution d'oodini fonctionne aussi, et s'appelle CRTP: Curiously Recurring Template Pattern (pour le P, je ne suis pas sûr, serait-ce TemPlate?)

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Citation Envoyé par leternel Voir le message
    Ce n'est pas du tout une template qu'il te faut, mais un retour covariant.
    Étrange, puisque tu dis plus bas que ma solution fonctionne.
    En fait, il lui faut un retour covariant à base de template s'il n'a pas besoin de polymorphisme.

    Citation Envoyé par leternel Voir le message
    Par ailleurs, juste pour le style, makeCopy(), copy() ou encore clone() serait de meilleurs nom de fonctions. En effet, ce n'est pas un get, parce que la copie n'est pas une propriété de l'objet.
    Effectivement.

    Citation Envoyé par leternel Voir le message
    La solution d'oodini fonctionne aussi, et s'appelle CRTP: Curiously Recurring Template Pattern (pour le P, je ne suis pas sûr, serait-ce TemPlate?)
    Pattern.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Par défaut
    Merci pour vos retours,

    Citation Envoyé par leternel Voir le message
    Bonjour à toi,
    Lis donc dans la faq les questions de retour covariant et de copie polymorphe
    justement c'est ce que je veux faire,
    Mais j'ai tellement de classe fille qu'il me serait plus facile de la définir une unique fois dans la mère.

    Ok pour le nom c'est vrai c'est un mauvais choix.

    Citation Envoyé par oodini Voir le message
    En fait, il lui faut un retour covariant à base de template s'il n'a pas besoin de polymorphisme.
    Je ne comprend pas ta remarque, le fait d'utiliser un template casse t il quelque chose a ce qui est expliqué dans la faq par rapport aux retours covariants pour la copie polymorphe ?

    EDIT: Et pour des ca comme celui ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    template <class T>
    class Mere<T>
    {
    	T* getCopie( void ){ return  new T(*this);};
    };
     
    class Fille : Mere<Fille>
    {
    };
    class PetiteFille : Fille/*<PetiteFille >*/ ??
    {
    };
    Merci d'avance

    Merci,

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Citation Envoyé par sone47 Voir le message
    Je ne comprend pas ta remarque, le fait d'utiliser un template casse t il quelque chose a ce qui est expliqué dans la faq par rapport aux retours covariants pour la copie polymorphe ?
    Ma solution n'est pas valide si tu voulais utiliser le polymorphisme dynamique, par exemple stocker dans un conteneur des pointeurs vers la classe mère.
    Car avec ma solution, il n'y a en fait pas de classe mère : toutes les classes mères sont différentes (Mere<Fille1>, Mere<Fille2>...), et tu ne peux donc utiliser le polymorphisme.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Par défaut
    Ok merci je comprends,
    Donc du coup je ne peux pas l'utiliser car je les stocke justement :/

    Je saurais pour la prochaine,
    Merci!

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/05/2013, 11h00
  2. Réponses: 3
    Dernier message: 13/10/2012, 15h02
  3. Réponses: 4
    Dernier message: 09/09/2010, 18h14
  4. fonction template pour container
    Par Bourrine dans le forum Langage
    Réponses: 8
    Dernier message: 26/06/2007, 13h55

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