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

C++ Discussion :

[template] arguments et type de retour


Sujet :

C++

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 506
    Points : 248
    Points
    248
    Par défaut [template] arguments et type de retour
    Bonjour,

    Je voudrais définir 2 fonctions template, et il y en a une qui n'est pas reconnue: elle compile, mais lorsque je l'utilise elle n'est pas reconnue...

    Celle-ci passe bien :
    template <class T>
    string myFunc(T arg) { ... return s ; }
    En revanche celle-ci pose le problème:
    template <class T>
    T myFunc(sring s) { ... return t ; }
    Est parcequ'il faut obligatoirement dans la signature du template le type générique défini ?
    Car si je met à la place (je sais c'est idiot t2 ne sert pas)
    template <class T>
    T myFunc(sring s, T t2) { ... return t ; }
    là ça passe

    Si quelqu'un peut m'éclairer, merci

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Au moment d'utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    template <class T>
    T myFunc(string s) { ... return t ; }
    Il faut spécifier le type de T, car le compilateur n'a aucun indice :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int i = myFunc<int>("toto");
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 506
    Points : 248
    Points
    248
    Par défaut
    aah oui, je vois pourquoi
    merci merci

  4. #4
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 506
    Points : 248
    Points
    248
    Par défaut
    ha, petite question supplémentaire, quelle est la syntaxe relative aux header ?

    J'ai mis dans le cpp:
    template <class T>
    T myclass::myFunc(sring s)
    {
    ... return t ;
    }
    et voulu mettre dans le header
    template <class T>
    T myFunc(sring s) ;
    mais à l'édition des liens je reçois un undefined reference, comme s'il ne faisiat pas le lien entre la déclaration et la définition .... est-ce normal ?

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 506
    Points : 248
    Points
    248
    Par défaut
    rq: en mettant tout dans le header c'est bon, mais j'aime pas

  6. #6
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  7. #7
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 506
    Points : 248
    Points
    248
    Par défaut
    hmm j'avoue que je n'ai pas été voir la-bas
    merci

  8. #8
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    un template n'est pas du code générique
    un template est juste une indication au compilateur sur comment générer automatiquement du code. Dans toutes les unités de compilation, il doit donc savoir comment générer ce code, et par conséquent... l'avoir sous la main

    A la sortie, si ton template de fonction est utilisée avec 7 types différents, tu auras vraiment 7 fonctions différentes.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  9. #9
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    [QUOTE=nicroman;3572634]un template n'est pas du code générique{/quote]

    Qu'est-ce que tu appelles du code générique alors?

    un template est juste une indication au compilateur sur comment générer automatiquement du code.
    C'est une technique d'implémentation -- celle attendue par les programmeurs. On pourrait aussi partager le code et avoir les instanciations qui fournissent une description de celle-ci; théoriquement possible, pratiquement, je doute que ce soit utilisé parce que ça cadre mal avec les attentes des programmeurs et certaines contraintes du C++ telle que l'existence des spécialisations explicites ou les règles sur la recherche de noms.

    D'autres languages sont conçus pour permettre le choix entre les techniques (Ada par exemple; certains compilateurs Ada permettent même le choix pour chaque générique, peut-être même par instance).

    D'autres languages sont dans la position inverse du C++, les contraintes du reste du langage et les attendes des utilisateurs imposent quasiment une version partagée.

    Dans les trois cas, on a de la généricité.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  10. #10
    screetch
    Invité(e)
    Par défaut
    nicroman dit que rien ne dit qu'un template doit avoir la meme implementation quel que soit le type, par exemple.

    un vector<T> est du code "générique" car quel que soit T, le code généré est le meme. mais les template permettent aussi de calculer un hash, et le code dans ce cas n'est pas générique; une specialisation existe pour chaque type. Ce n'est pas du code qui sait s'adapter a tout les types; c'est du code qui existe pour differents types et qui fait des choses... ou d'autres.

  11. #11
    Alp
    Alp est déconnecté
    Expert éminent sénior

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    En un sens il s'adapte ! Seulement c'est à la façon dont le programmeur le dit.

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

Discussions similaires

  1. Template et fonction amie / type de retour inconnu
    Par Armas dans le forum Débuter
    Réponses: 13
    Dernier message: 24/04/2013, 15h17
  2. Réponses: 4
    Dernier message: 23/07/2011, 08h35
  3. Réponses: 2
    Dernier message: 17/10/2010, 15h11
  4. Réponses: 10
    Dernier message: 13/04/2009, 13h02
  5. type de retour de fonction template
    Par k1000 dans le forum Langage
    Réponses: 5
    Dernier message: 21/04/2008, 11h41

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