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] fonctions template de classe template et spécialisation partielle


Sujet :

Langage C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 48
    Points : 46
    Points
    46
    Par défaut [Template] fonctions template de classe template et spécialisation partielle
    Bonjour à tous,

    Quelqu'un saurait-il comment réaliser (si c'est possible) une spécialisation partielle de fonction template de classe template du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    template <class T2, template<class T> class T1> void f(const T1<T2>&)
    Si je souhaite par exemple spécialiser partiellement f pour 2 containers de la std, je pensais pouvoir faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    template <class T2, template<class T> class vector> void f(const vector<T2>&)
    template <class T2, template<class T> class list> void f(const list<T2>&)
    mais mon compilateur (g++ (GCC) 4.2.3 (Ubuntu 4.2.3-2ubuntu7)) ne voit manifestement pas la différence entre ces deux spécialisations car à la compilation il me met un message d'erreur de type redéclaration de fonctions...

    Merci beaucoup pour votre aide !

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 48
    Points : 46
    Points
    46
    Par défaut
    Finalement j'ai résolu mon problème tout seul.

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Je dis peut-être une connerie, mais il me semble que les spécialisations partielles de fonction templates dans des classes templates sont comme les spécialisations partielles de fonctions templates libres: Impossibles en C++98.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Oui, il faut utiliser SFINAE à la place.
    Boost ftw

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 48
    Points : 46
    Points
    46
    Par défaut
    En fait pour specialiser partiellement la fonction f pour la classe template vector, il ne fallait pas écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    template <class T2, template<class T> class vector> void f(const vector<T2>&)
    mais tout simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    template <class T> void f(const vector<T>&)
    et tout semble bien fonctionner à la compilation, linkage et execution.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 20/05/2012, 13h39
  2. Spécialisation de fonction template dans une class template
    Par summerstorm dans le forum Langage
    Réponses: 6
    Dernier message: 05/01/2010, 20h15
  3. Réponses: 9
    Dernier message: 05/01/2010, 08h32
  4. [Template] Surchage d'une class template
    Par vincho dans le forum Langage
    Réponses: 3
    Dernier message: 15/05/2007, 11h29
  5. Problèmes de fonctions membres de classe templates, gcc3.3.6
    Par yves.dessertine dans le forum Autres éditeurs
    Réponses: 12
    Dernier message: 17/10/2005, 21h36

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