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][surcharge] surchage d'une méthode template


Sujet :

Langage C++

  1. #1
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut [template][surcharge] surchage d'une méthode template
    bonsoir.

    J'ai la classe suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    template<class T1> 
    class A
    {
        A<T1> methode(A<T1> arg);
     
        template<class T2>
        A<T1> methode(A<T2> arg);
     
    }
    J'ai en effet dû faire cela car je ne pouvais spécialiser la seconde méthode pour T1.

    La question est: comment savoir laquelle des méthodes sera appelée si je fait quelque-chose du genre A<T1>.methode(A<T1>())...


    merci

  2. #2
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Il faudrait demander aux gourous mais je dirais la première car il y a correspondance exacte dans les types des paramètres.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  3. #3
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Bah, il faut faire un simple test :
    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
     
    #include <iostream>
     
    template<class T1> 
    class A
    {
    public:
        void methode(A<T1> arg) { std::cout << "1" << std::endl;}
     
        template<class T2>
        void methode(A<T2> arg) { std::cout << "2" << std::endl;}
     
    };
     
    int main()
    {	
    	A<int>	a_int;
    	A<char> a_char;
     
    	a_int.methode(a_int);
    	a_int.methode(a_char);
     
    	return 0;
    }
    Effectivement, on a :
    1
    2
    comme sortie d'écran.

  4. #4
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Poukill > un test n'est pas une preuve. Ca montre juste qu'avec ton compilateur, sur ta machine et avec l'alignement de la lune actuel, ca marche comme bien comme cela.


    Il faudrait aller fouiller la norme ou un livre de référence (p-e C++ The template Guide) mais je n'ai pas le temps.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  5. #5
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Ben là, ta surcharge, c'est comme si tu avais spécialisé methode pour T1.

    Le compilateur cherche la version qui est la plus "spécialisée" pour la faire correspondre ensuite.

  6. #6
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    Citation Envoyé par Alp Voir le message
    Ben là, ta surcharge, c'est comme si tu avais spécialisé methode pour T1.

    Le compilateur cherche la version qui est la plus "spécialisée" pour la faire correspondre ensuite.
    Merci alp, ça m'aide bien car il est justement impossible de faire une spécialisation partielle d'une méthode template d'une classe template.


    sinon, je note la référence de david, je sent que je vais en avoir besoin.


    merci à tous

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

Discussions similaires

  1. Bind d'une méthode template privée
    Par kidpaddle2 dans le forum Boost
    Réponses: 2
    Dernier message: 29/06/2010, 16h32
  2. Réponses: 1
    Dernier message: 09/04/2010, 11h15
  3. [Template] Surchage d'une class template
    Par vincho dans le forum Langage
    Réponses: 3
    Dernier message: 15/05/2007, 11h29
  4. Surcharge de << avec une class Template ?
    Par elraton dans le forum Langage
    Réponses: 10
    Dernier message: 04/01/2007, 09h34
  5. Appeler une méthode template d'un paramètre template
    Par YéTeeh dans le forum Langage
    Réponses: 2
    Dernier message: 26/08/2006, 12h50

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