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 partielle de fonctions templates au sein d'une struct template


Sujet :

Langage C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 85
    Points : 35
    Points
    35
    Par défaut specialisation partielle de fonctions templates au sein d'une struct template
    Bonjour,
    Je m'excuse par avance de la juniorité de ma question mais j essaie de faire fonctionner le toy code suivant qui consiste à spécialiser, par un template, une fonction au sein même d'une structrure template.
    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
    template <int U>
    struct A
    {
    	A(int a):a_(a){}
     
     
    	template< int I >
    	void f( int x)
    	{
    	return x+a_+I+U;
    	}
     
    	template<>
    	void f<2>(int x)
    	{
    		return x+a_;	
        }
     
    	int a_;
    };
     
     
     
    int main(void){
     
     
    A<2> h(6);
    int b =h.f<3>(2);
    int c =h.f<2>(2);	
     
    return 0;
     
    }
    Encore un fois, pardon pour l'ingénuité de ma question mais google et/ou mon vieux compilateur ne m'aident pas beaucoup

  2. #2
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Tu ne peux pas faire ce que tu veux... Une solution est de définir la méthode dans une structure.

  3. #3
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    Salut,

    tout d'abord un petit mot pour dire que tes fonctions doivent retourner int et non void.

    Voilà le mieux que j'ai pu faire:

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    #include <iostream>
    using std::cout;
    using std::endl;
     
    template <int U>
    struct A
    {
        A(int a):a_(a){}
        int a_;
     
        enum {Value = U};
    };
     
    template <int i>
    struct F
    {
        template <class T>
        int f(const T &b, int x)
        {
            return b.Value + i + x + b.a_;
        }
    };
     
    template <>
    struct F <2>
    {
        template <class T>
        int f(const T &b, int x)
        {
            return x + b.a_;
        }
    };
     
     
    int main(void){
     
     
        A<2> h(6);
        int b = (F<3>()).f(h, 2);
        int c = (F<2>()).f(h, 2);
     
        cout << b << " " << c << endl;
     
        return 0;
     
    }

    Avec mon compilateur, on ne peut pas préciser des objets (des classes instanciées) en spécification de template pour des fonctions, je ne sais rien pour les compilateur plus récents.

    Je te conseille de lire ceci pour te renseigner un peu sur l'usage des templates et des spécifications.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 85
    Points : 35
    Points
    35
    Par défaut Merci
    C est exactement la mécanique que je cherchais
    Merci encore

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/12/2012, 10h45
  2. Réponses: 6
    Dernier message: 12/06/2009, 10h54
  3. Réponses: 4
    Dernier message: 25/10/2007, 17h18
  4. Réponses: 3
    Dernier message: 05/09/2006, 15h59
  5. Réponses: 5
    Dernier message: 29/12/2005, 21h27

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