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 d'une méthode générique dans une classe


Sujet :

Langage C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 13
    Points : 11
    Points
    11
    Par défaut Spécialisation d'une méthode générique dans une classe
    Salut!

    J'ai comme un léger problème avec une classe...
    Je voudrais pouvoir gêrer un cas particulier d'une méthode template...
    - J'ai essayé de la déclarer dans le corps de ma classe, le compilateur a levé une erreur de namespace... J'en ai déduit que le prototype de ma méthode template sert aussi pour les spécialisations...
    - J'ai ensuite séparé le code en 3 fichiers, un pour les méthodes non génériques, un pour les templates, inclus en fin de mon .h et le .h...

    En définitive, j'obtient un couple d'erreurs de redéfinition de la fonction spécialisée... Le problème est que la ligne de la première erreur "multiple definition of..." est la même que la ligne de la seconde "first defined here"

    Cependant, la source diffère... La première vient du fichier lui-même .cpp, la seconde vient du .o de ce fichier...

    Un peu comme si la définition de la template générique, se définissait pour tous les types sans tenir compte des spécialisations...

    Pourriez-vous m'aider? J'utilise Code::Blocks

  2. #2
    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 et bienvenu,
    Je ne suis pas sûr d'avoir complètement compris ton problème. Mais est-ce que tu voulais faire ça :
    A.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    struct A
    {
      void function();
       template<class T> inline void function_t(T);
    };
    template<>
    inline void A::function_t<int>(int);
     
    #include "A.tpp"
    A.tpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    template<class T> 
    inline void A::function_t(T)
    {
       // generique
       function_t(3);// appel de la version specialisee
    }
    template<>
    inline void A::function_t<int>(int)
    {
    // specialisation
    }
    a.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include "a.h"
     
    void A::function()
    {
       function_t(3);
       function_t("tutu");
    }

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Merveilleux^^ Merci beaucoup!!

    Je connaissais pas inline : / Enfin... Je pensais que c'était la valeur par défaut... J'ai vaguement vu cette notion en html... Mais rien à voir j'imagine^^

    Je savais pas qu'il fallait déclarer les prototypes des spécialisations en dehors de l'objet non plus... Et avec inline devant ça compile impec!!

    Merci encore^^

    PS: J'ai tout de même besoin d'inclure "A.h" au début du .cpp des templates, je ne peux pas déclarer de .tpp :s sinon c'est un .tpp.cpp...
    Je dois aussi entourer le .cpp générique de ifndef def endif... C'est normal?

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

Discussions similaires

  1. arrayList dans une méthode recupérer dans une autre méthode
    Par toufik34 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 31/07/2013, 09h45
  2. Réponses: 4
    Dernier message: 22/11/2010, 14h15
  3. Réponses: 8
    Dernier message: 22/03/2010, 16h52
  4. Réponses: 6
    Dernier message: 13/11/2009, 16h06
  5. [POO] utiliser une méthode présente dans une autre classe
    Par arnaudperfect dans le forum Langage
    Réponses: 5
    Dernier message: 19/10/2007, 14h23

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