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 ou héritage


Sujet :

Langage C++

  1. #1
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Par défaut Template ou héritage
    Bonjour,

    Petit souci de choix ente deux techniques. J'illustre ça par un exemple : je réalise une classe DocumentManager, pour gérer les documents d'une appli, de manière générique (en gros pour éviter de refaire les procédures d'ouverture, sauvegarde, etc à chaque fois). Pour la sauvegarde par exemple, l'appli demande généralement le nom du fichier dans lequel va être sauvegardé le document. Comme cela varie en fonction des libs graphiques utilisées, il faut que ce soit paramétrable. D'où ma question : est-il préférable de le faire sous forme de Policy ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    template <class SavePolicy>
    class DocumentManager : public SavePolicy{
     
      //quelque part dans la fonction save :
      std::string file_name = SavePolicy::get_file_name();
    (Bon ici j'ai choisi l'héritage, ça peut très bien être une composition, la questino n'est pas là).

    Ou bien en utilisant une interface Save, et redéfinir les comportements pour chaque librairie :

    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
     
    class DocumentManager {
     
        SavePolicy* save;
    };
     
    class SavePolicy {
     
        public:
     
            virtual std::string get_file_name() =0;
     
    };
     
    class QTSavePolicy {
    //etc
     
    }
    Merci d'avance.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Par défaut
    Si tu n'as qu'un seul type de 'politique' et qui plus est une seule 'politique', il vaut mieux ne pas utiliser ce type de conception.

  3. #3
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Par défaut
    Non c'était juste un exemple pour illustrer :p Je vais avoir plusieurs policies, et plusieurs implémentations différentes de policies. La question c'est le choix entre utilisatino d'une classe template ou utilisation d'une interface que l'on implémenta par la suite en fonction du comportement souhaité.

  4. #4
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    Bah... Ca dépend. Il est censé se résoudre quand ton polymorphisme ?
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  5. #5
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Par défaut
    A la compilation ....

    Bon bah je suis un et je m'auto

  6. #6
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    Ta variabilité peut être exploitée une seule, ou plusieurs fois ?
    - plusieurs fois => les templates c'est bien
    - 1 fois => tu peux aussi avoir un fichier d'implémentation qui dépend de la compilation, ce qui va revenir à jouer avec les makefile et ton éditeur de liens. L'unicité du fichier d'en-tête n'est même pas une nécessité tant que tous exposent une interface publique commune et que tu joues soit avec la compilation conditionnelle via le pré-compilo, soit avec les chemins où chercher les fichiers à inclure.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  7. #7
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Par défaut
    Au niveau de chaque application, cette variabilité ne sera exploitée qu'une fois. Maintenant j'ai d'autres paramètres qui peuvent également varier, je préfère donc avoir un traitement uniforme.

    Merci pour l'indication en tout cas, c'est une technique dont je n'ai pas trop l'habitude et à laquelle je n'ai pas forcément tendance à penser.

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

Discussions similaires

  1. Template et héritage privé.
    Par 3DArchi dans le forum Langage
    Réponses: 6
    Dernier message: 18/09/2009, 09h36
  2. Template et héritage
    Par Ulmo dans le forum Langage
    Réponses: 16
    Dernier message: 08/03/2009, 23h41
  3. Template et héritage
    Par rooger dans le forum Langage
    Réponses: 5
    Dernier message: 22/07/2008, 13h48
  4. Foncteur, classes templates et héritage
    Par Floréal dans le forum C++
    Réponses: 8
    Dernier message: 17/06/2007, 21h56
  5. patron, templates et héritages!
    Par kleenex dans le forum C++
    Réponses: 4
    Dernier message: 05/06/2006, 22h57

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