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 :

Question de base sur un template


Sujet :

Langage C++

  1. #1
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut Question de base sur un template
    Bonjour

    Je ne vois pas du tout pourquoi le code suivant ne peut pas fonctionner:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    template< class T > T check( T );
    template< class S > void watch( S (*)(S) );
    watch( check );     //error
    Autant je comprendrais pourquoi ce code ne peut pas fonctionner:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    template< class T > T check( T );
    template< class S > void watch( int (*)(S) );
    watch( check );     //error
    car dans ce cas, on a une fonction qui renvoie un int et qui prend un argument de type S, alors que check renvoie et prend un argument de même type (et encore, le compilateur pourrait automatiquement transformer S en int).
    Le compilateur renvoie comme erreur:
    no instance of function template matches the argument list.


    Mais je ne vois pas du tout pourquoi.

    Merci

  2. #2
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 545
    Par défaut
    il y a une erreur parce qu'il faut indiquer les actuals à utiliser, et donc par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void f1()
    {
      watch<int>( check<int> );
    }
     
    template < class S>
    void f2() 
    { 
      watch<S>( check<S> ); 
    }
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  3. #3
    Invité
    Invité(e)
    Par défaut
    check n'est pas une fonction, c'est un modèle de fonction; pour avoir une fonction tu peux faire quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    watch( &check<int> ); // ou char,long,MonType, ...

  4. #4
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    C'est quoi les actuals?
    C'est la liste des paramètres templates?

  5. #5
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 545
    Par défaut
    Citation Envoyé par deubelte Voir le message
    C'est quoi les actuals?
    les paramètre actuels sont aux paramètres formels ce que les arguments de fonction/operation sont aux paramètres de fonction/operation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    template<typename formel1, ..., typename formeln> class C { ... }
     
    C<actual1, ...actualn> c;
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  6. #6
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    Autre question sur les template.
    Existe t il des spécialisations de fonctions template, comme il existe de spécialisation de template, mais pour les classes?
    merci

  7. #7
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 545
    Par défaut
    cette discussion récente
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  8. #8
    Membre Expert
    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
    Par défaut
    Citation Envoyé par deubelte Voir le message
    Autre question sur les template.
    Existe t il des spécialisations de fonctions template, comme il existe de spécialisation de template, mais pour les classes?
    merci
    Non, pas en C++03 tout du moins. (note que les paramètres template par défaut ne sont pas non plus admis sur les fonctions templates)

  9. #9
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par Goten Voir le message
    Non, pas en C++03 tout du moins. (note que les paramètres template par défaut ne sont pas non plus admis sur les fonctions templates)
    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
    #include <iostream>
     
     
    template<typename T>
    void fonction(T const&)
    {
        std::cout<<"generique\n";
    }
    template<>
    void fonction<int>(int const&)
    {
        std::cout<<"specialisation\n";
    } // --> OK.
     
    /*
    template<typename T>
    void fonction<T*>(T*)
    {
        std::cout<<"specialisation partielle\n";
    }
    --> Erreur
    */
     
    int main()
    {
        fonction(1);
        fonction("tutu");
        return 0;
    }
    Ceci dit avant de faire de la spécialisation sur une fonction libre générique, on peut se poser la question de la surcharge.

  10. #10
    Membre Expert
    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
    Par défaut
    Autant pour moi, me semblait bien qu'il manquait un petit mot pour que ça soit juste ce que je disais :').

Discussions similaires

  1. Question de base sur un template
    Par deubelte dans le forum Débuter
    Réponses: 10
    Dernier message: 05/05/2010, 13h31
  2. [Débutant] Questions de base sur java
    Par JajaY dans le forum Langage
    Réponses: 2
    Dernier message: 04/04/2006, 18h51
  3. Question de base sur l'utilisation de la fonction date()
    Par deaven dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/12/2005, 15h33
  4. Question de base sur les classes
    Par deaven dans le forum C++
    Réponses: 3
    Dernier message: 27/11/2005, 16h20
  5. [Débutant] Question de base sur le BDE et les SGBD
    Par Invité dans le forum Bases de données
    Réponses: 3
    Dernier message: 15/03/2005, 08h45

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