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 d'une fonction (!= classe)


Sujet :

Langage C++

  1. #1
    Membre éclairé Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Par défaut Template d'une fonction (!= classe)
    Bonjour,

    J'ai une fonction globable placée dans un namespace Elle prend en paramètres des doubles et je souhaiterais la rendre générique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    double Addition(double a, double b)
    {
       return (a+b);
    }
     
    template <T>
    T Addition(T a, T b)
    {
       return (a+b);
    }
    Bien évidemment ça ne fonctionne pas ! C'est impossible d'appliquer ce principe aux fonctions? Suis-je obligé de placer cette fonction dans une classe?

    Merci!

  2. #2
    Membre expérimenté
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    237
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 237
    Par défaut
    Il faut déclarer un template de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        template <typename T>
        T Addition(T a, T b)
        {
           return (a+b);
        }
    Par contre, le template permet de générer les fonctions suivant le code fournis : ie. on ne peut pas le mettre dans un fichier séparé et compilé sans que dedans ce fichier on n'appelle la fonction. (un peu tordue ma phrase )

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    template <typename T>
    T Addition(T a, T b)
    {
       return (a+b);
    }
    Bien évidemment ça ne fonctionne pas
    La prochaine fois pense à donner plus de précisions, on n'est pas devins...

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 109
    Par défaut
    Pense aussi à déclarer ta fonction-template AVANT les spécialisations (ce n'est pas le cas dans ton exemple)

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Citation Envoyé par Kaktus
    Pense aussi à déclarer ta fonction-template AVANT les spécialisations (ce n'est pas le cas dans ton exemple)
    Ce n'est pas une spécialisation, mais une surcharge qui n'a rien à voir avec la fonction template du même nom.

    Par ailleurs je pense qu'il voulait juste montrait ce qu'il a à l'heure actuelle, et ce à quoi il veut parvenir. Mais je ne pense pas que ces deux fonctions se trouvent dans un même bout de code

  6. #6
    Membre éclairé Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Par défaut
    Super ce forum, j'ai toutes les réponses à mes questions ici!
    Laurent: tout à fait, c'est juste un exemple ...

    Tipoun: (je pense que j'ai compris ta phrase ), oui c'est un peu embêtant qu'on ne puisse pas mettre la déclaration des fonctions dans un .cpp et la déclaration dans un .h comme on le fait normalement pour les classes...

    Mille fois Merci!
    Cordialement,
    Rodrigue

  7. #7
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 19
    Par défaut
    Je penses que c'est possible, même si c'est pas beau à voir :

    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
     
    //   addition.h
     
    #ifndef __ADDITION_H
    #define __ADDITION_H
     
    template <typename T> T Addition(T &a, T &b);
     
    #include "addition.cpp"
     
    #endif
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     
    //   addition.cpp
     
    template <typename T>
    T Addition(T &a, T &b)
    {
        return a+b;
    }

  8. #8
    Membre éclairé Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Par défaut
    Oui, oui c'est déjà résolu (j'avais d'ailleurs déjà marqué le problème comme étant résolu )

    Bonne soirée

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/07/2012, 20h30
  2. Réponses: 8
    Dernier message: 03/12/2010, 16h03
  3. Problème avec paramètre d'une fonction (classe)
    Par clement.analogue dans le forum Langage
    Réponses: 8
    Dernier message: 23/03/2010, 08h13
  4. [eZ Publish] problème de templating d'une nouvelle classe
    Par leemazong dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 22/02/2010, 10h03
  5. declaration static d'une fonction classe
    Par SBP dans le forum MFC
    Réponses: 2
    Dernier message: 06/07/2004, 14h40

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