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] specialisation de classe template


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 162
    Par défaut [Template] specialisation de classe template
    Voila j'ai une classe template generale ainsi qu'une specialisation totale de cette classe.
    Cependant, j'ai certaines fonctions membre de la classe totalement specialisee qui sont identiques aux membres de la classe template generale.
    Comment faire pour eviter la duplication de code dans ce cas ?

  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 les fonctions membres communes ne dépendent pas du type, il est conseillé de les sortir du template et de les regrouper dans une classe "Base" dont le template héritera.

    Sinon, je ne vois qu'une solution par délégation sur un autre objet ou fonction.

  3. #3
    Alp
    Alp est déconnecté
    Expert confirmé

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Oui, un héritage privé d'une classe contenant le "tronc commun", ça peut être une bonne idée.

    Tu peux expliquer le contexte concret dans lequel tu rencontres ce "soucis" de duplication ?

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 162
    Par défaut Merci pour vos reponses
    Pour préciser, voici un extrait de mon code :

    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
    29
    30
    31
    32
    33
    34
    35
     
    class CellData
    {
    	public:
    		virtual ~CellData() {}
     
    		virtual bool hasCandidate(int candidate) const = 0;
    		int getValue() const;
    		std::vector<int> getCandidates() const;
    		virtual std::string toString() const = 0;
    };
     
    std::ostream& operator<< (std::ostream& out, const CellData& data);
     
    template <typename T>
    class TCellData;
     
    template <typename T = int>
    class TCellData : public CellData
    {
    	public:
    		TCellData() { init(); }  // Tous les bits a 1
    		void init() { cell_ = (1 << (Constants::N2+1)) - 1; }  // Tous les bits a 1
    		void setValue(int value) { cell_ = 1 << value; }
    		void removeCandidate(int value) { cell_ &= ~(1 << value); }
    		void addCandidate(int value) { cell_ |= (1 << value); }
    		bool isCandidate() const { return (cell_ & 1) != 0; }
    		virtual bool hasCandidate(int candidate) const { return ((cell_ >> candidate) & 1) != 0; }
    		int getNbCandidates() const;
    		bool isValid() const { return cell_ > 1; }
    		virtual std::string toString() const;
     
    	private:
    		T cell_;
    };
    j'ai donc une classe TCellData qui est template et qui possede plusieurs spécialisations.
    Mais des méthodes comme int getValue() const; par exemple ne dépendent pas d'un paramètre template.
    Donc au lieu de dupliquer ce code dans chaque spécialisation de la classe TCellData, je le factorise dans une classe de base publique car l'accès a ces méthodes doit rester public.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 20/10/2009, 08h54
  2. Fonction template dans une classe template
    Par mister3957 dans le forum Langage
    Réponses: 9
    Dernier message: 08/07/2008, 12h11
  3. [template]Héritage d'une Template par une Classe
    Par koni33 dans le forum Langage
    Réponses: 0
    Dernier message: 11/05/2008, 14h12
  4. Réponses: 8
    Dernier message: 20/07/2007, 14h28
  5. Réponses: 9
    Dernier message: 19/05/2007, 15h28

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