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 :

Specialisation partielles de fonctions membres template


Sujet :

Langage C++

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 42
    Points : 18
    Points
    18
    Par défaut Specialisation partielles de fonctions membres template
    Bonjour a tous et joyuses fêtes,

    J'ai eu une petite perte de memoire concernant les Template, et pour me rafraichir la memoire j'ai tape ce code et je l'a compile (sous linux) :

    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
     
    #include <iostream>
     
    using namespace std;
     
    class CTest
    {
      public:
     
       template <class T, class U>
       void function(T, U);
    };
     
    template <class T, class U>
    void CTest::function(T var, U var2)
    {
       cout << "T & U";
    }
     
    template <class T>
    void CTest::function(T var, int var2)   // specialisation pour U == int 
    {
    }
     
    int main()
    {
       return 0;
    }
    Ce code ne compile pas, je ne comprends pas pourtant y'a pas d'erreur, il faut des options speciales ?
    Par contre si je met qu'un argument template et que je fais une specialisation totale, y'a pas de pb....

    Faut-il declarer la specialisation dans la classe ?

    Merci.

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Tu tente de faire une spécialisation partielle de fonction template, ce qui n'est pas permis. Seules les template de classe peuvent avoir une spécialisation partielle.

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 42
    Points : 18
    Points
    18
    Par défaut
    ah bon ? pourtant ce code fonctionne parfaitement :

    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
     
    #include <iostream>
     
    using namespace std;
     
     
    template <class T, class U>
    void function(T var, U var2)
    {
       cout << "T & U";
    }
     
    template <class T>
    void function(T var, int var2)   // specialisation pour U == int
    {
    }
     
    int main()
    {
       function("string", 59);
     
       return 0;
    }
    Peut-etre que tu as voulu dire que la specialisation partielle ne fonctionne pas sur des fonctions membres template ?

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Le code est peut-être bon, mais pas le commentaire...

    Là, tu ne spécialise pas une fonction template, tu la surcharge juste par une autre fonction template elle aussi, ce qui est permis.

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 42
    Points : 18
    Points
    18
    Par défaut
    Et je peux surcharger 2 fonctions template dans une classe ?

  6. #6
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par taron
    Et je peux surcharger 2 fonctions template dans une classe ?
    Je ne vois pas de problèmes à cela.

Discussions similaires

  1. Réponses: 9
    Dernier message: 05/01/2010, 08h32
  2. Réponses: 3
    Dernier message: 29/03/2009, 10h21
  3. Spécialisation partielle de fonction membre?
    Par NiamorH dans le forum C++
    Réponses: 2
    Dernier message: 20/06/2008, 14h54
  4. Problème de spécialisation de fonction membres template
    Par ludovic.barrillie dans le forum Langage
    Réponses: 3
    Dernier message: 17/04/2007, 08h44
  5. Pointeur de fonction membre template
    Par bolhrak dans le forum Langage
    Réponses: 6
    Dernier message: 12/12/2006, 14h47

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