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 :

Spécialisation partielle d'un membre de classe


Sujet :

Langage C++

  1. #1
    Invité
    Invité(e)
    Par défaut Spécialisation partielle d'un membre de classe
    Bonjour,

    J'ai un modèle de classe qui dépend de deux paramètres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    template<typename S,typename T> class MaClasse {
    T DesDonnees;
    S DautresDonnees;
     
    void UneFonction(void)
    void LaFonctionCompliquee(void)
    };
    Je voudrais spécialiser partiellement, pour un type donné, une seule de mes fonctions. Donc avoir quelque chose qui me permette de définir une implémentation particulière de LaFonctionCompliquee() dans le cas où le paramètre S prend un certain type (mais en laissant T comme type variable)...

    Au final, je voudrais quelque chose comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    template<typename T> void  MaClasse<string,T>::LaFonctionCompliquee(void)
    sans avoir à refaire tout le reste de l'interface de ma classe. J'ai essayé plusieurs syntaxe, fouiné sur l'internet, mon compilateur reste sourd à mes demandes...

    Est ce possible? Comment?

    Merci d'avance
    Francois

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 126
    Points : 149
    Points
    149
    Par défaut
    Bonjour,

    En se basant sur le chapitre dédié de ce cours :
    http://cpp.developpez.com/cours/cpp/...ge_14#LXIV-E-3
    Tu dois pouvoir contourner le problème d'impossibilité de spécialisation partielle.

    Ta méthode générique serait quelquechose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    template<typename S, typename T> static void LaFonctionCompliquee(void) {}
    Et sa spécialisation serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    template<T> static void LaFonctionCompliquee<string, T>(void)
    {
        // ton code
    }
    Cordialement,
    A.
    Un ordinateur fait au bas mot 1 million d'opérations à la seconde, mais il n'a que ça à penser, aussi. (brèves de comptoirs, JM.Gourio)


  3. #3
    Invité
    Invité(e)
    Par défaut
    Ah oui, mais non...

    La fonction membre utilise les variables de l'instance de la classe, si j'en fais une fonction indépendante, je vais devoir lui passer une instance en paramètre.

    Bon, en lisant le cours, j'en déduit qu'on ne peut spécialiser partiellement un "bout" de classe template. Il faut tout redéfinir. C'est cela?

    Donc, suivant la complexité, soit il faut redéfinir mon template en autant de templates qu'il y a de second types possibles, soit définir tout la classe dans les spécialisations partielles.

    Francois

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    Une spécialisation d'une classe redéfinit toute la classe (et ne bénéficie pas des définitions précédentes). Donc je ne pense pas que tu puisses spécialiser partiellement une de ses méthodes. En effet, tu pourrais écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    template<typename T>class MaClasse<std::string,T>
    {
       int LaFonctionCompliquee;
    };
    Ce qui serait assez perturbant pour le compilateur

  5. #5
    Invité
    Invité(e)
    Par défaut
    Effectivement... Merci de l'info. Je vais donc spécialiser ma classe en explicitant les valeurs possibles du paramètre S.

    Merci beaucoup
    Francois

Discussions similaires

  1. Réponses: 9
    Dernier message: 05/01/2010, 08h32
  2. Réponses: 4
    Dernier message: 04/09/2008, 10h58
  3. Spécialisation de méthode membre de classe template
    Par Zbouirf dans le forum Langage
    Réponses: 3
    Dernier message: 23/07/2008, 02h30
  4. Spécialisation partielle de fonction membre?
    Par NiamorH dans le forum C++
    Réponses: 2
    Dernier message: 20/06/2008, 14h54
  5. Réponses: 4
    Dernier message: 29/01/2006, 17h54

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