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 spécialisation partielle


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 18
    Par défaut Template spécialisation partielle
    Bonjour,
    Je m'entraine sur les templates et je n'arrive pas à résoudre un probleme.
    J'ai une classe template :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    template <typename T, typename S>
    class cl{
    public:
      cl();
      ~cl(){}
     
    };
    J'aimerais pouvoir "spécialiser" le constructeur de cette class, comme ceci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    template <typename T, typename S>//ERREUR 2
    cl<T,S>::cl()
    {
      std::cout<< "fonct generale"<<std::endl;
    }
    //Specialisation
    template <typename T> // ERREUR 1
    cl<T,T>::cl()
    {
      std::cout<< "Specialisation1"<<std::endl;
    }
    Mais j'obtient les erreurs suivantes :
    invalid use of incomplete type ( ERREUR 1) et declaration of (ERREUR 2)

    Qu'est ce qui ne va pas dans ce code ?

  2. #2
    Membre chevronné

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 18
    Par défaut
    Citation Envoyé par bertry Voir le message
    Ce n'est pas du tout ce que je cherche.
    Ma question est plutot comment créer des templates spécialiser des methodes methodes membres d'un template ?

    Merci comme même.

  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
    Par défaut
    Salut,
    Tu dois faire une spécialisation partielle de toute la classe et pas seulement d'un des membres. On ne peut pas faire une spécialisation partielle de seulement un membre ou d'une fonction libre.
    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
    #include <iostream>
     
    template <typename T, typename S>
    class cl{
    public:
      cl();
      ~cl(){}
     
    };
     
    template <typename T, typename S>
    cl<T,S>::cl()
    {
      std::cout<< "fonct generale"<<std::endl;
    }
    //Specialisation partielle de la classe :
    template <typename T>
    class cl<T,T>{
    public:
      cl();
     
    };
     
    template <typename T> 
    cl<T,T>::cl()
    {
      std::cout<< "Specialisation1"<<std::endl;
    }
     
     
    int main()
    {
     
       return 0;
    }

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 18
    Par défaut merci pour ta reponse
    En effet j'ai vu qu'il est impossible de faire une spécialisation partielle d'une méthode d'un template.
    Tu as proposé une solution possible mais j'ai trouvé une solution plutôt pas mal.
    On crée un structure et une spécialisation de cette strucure avec que des methodes static.
    Et ensuite dans les methodes de notre classe on appel les fonctions static de la structure :
    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
     
     template <typename T, typename S>
      struct cl_gen{
        static void func(){ std::cout<< "fonct generale"<<std::endl;}
      };
     
      template <typename T>
      struct cl_gen<T,T>{
        static void func(){ std::cout<< "Specialisation1"<<std::endl;}
      };
     
      template <typename T, typename S>
      class cl{
      public:
        cl();
        ~cl(){}
     
      };
      template <typename T, typename S>
      cl<T,S>::cl()
      {
        cl_gen<T,S>::func();
      }

  6. #6
    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
    Par défaut
    Citation Envoyé par saladin04 Voir le message
    Tu as proposé une solution possible mais j'ai trouvé une solution plutôt pas mal.
    Je ne connais pas ton problème donc je n'ai qu'illustré mon propos
    Ceci dit, en regardant ton code, cela me fait penser que cet article devrait t'intéresser (avant que tu ne réinventes la roue : Présentation des classes de Traits et de Politiques en C++ par Alp Mestan
    La solution vers laquelle tu t'orientes m'amène à penser que tu vas avoir rapidement besoin de traits et de politiques pour définir tes classes génériques

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

Discussions similaires

  1. Spécialisation partielle et typedef de template.
    Par 3DArchi dans le forum Langage
    Réponses: 7
    Dernier message: 08/09/2009, 18h53
  2. [Template] Spécialisation partielle d'un template
    Par Kurisu dans le forum Langage
    Réponses: 31
    Dernier message: 25/11/2008, 22h21
  3. [Template] spécialisation partielle des template
    Par vikki dans le forum Langage
    Réponses: 9
    Dernier message: 10/11/2008, 16h29
  4. Réponses: 4
    Dernier message: 15/10/2008, 09h33
  5. Réponses: 4
    Dernier message: 04/09/2008, 10h58

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