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 :

Detecter le type d'un argument d'une fonction


Sujet :

C++

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 66
    Par défaut Detecter le type d'un argument d'une fonction
    Bonjour,
    je dois passer un parametre à une fonction, le type de ce parametre est string ou double, en fonction de ce type, la fonction va se comporter differement. Coment détecter le type du parametre d entrée?

    (Cette fonction n'appartient à aucune classe)

  2. #2
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 868
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 868
    Par défaut
    Salut,

    Tu peux implémenter deux fonctions, une qui gérera un cas, et l'autre qui gérera l'autre. Ou bien tu lui passes un pointeur non typé ?

    C'est la surcharge d'une fonction.

    A+

  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
    Tu peux utiliser les templates.
    Ca depend de ce que tu fais dans ton programme.

    Sinon, je verrais bien deux fonctions: isString() et isDouble()...

  4. #4
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 868
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 868
    Par défaut
    Oui bien sûr les templates, c'est encore plus propre dans ce cas

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 66
    Par défaut
    mais quelle est la difference entre un template et la surcharge d'une fonction? C'est le fait que pour le template, quelque soit le type le code de la fonction sera le meme alors que pour la surcharge, le code peut etre different?

  6. #6
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 868
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 868
    Par défaut
    Oui les templates permettent d'éviter de dupliquer du code.

  7. #7
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 66
    Par défaut
    d'accord, mais vu qu en fonction du type, j effectue une ecriture dans un fichier du parametre que je recois et que a facon de l ecrire dépend de son type, je ne peut pas utiliser les templates.
    Merci pour votre aide

  8. #8
    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
    Hé non...
    Avec les stream du C++, tu n'as pas besoin de connaitre le type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ostream fichier; // à compléter
    fichier << donnees
    marchera si donnees est string ou double...cf FAQ

    Donc les templates sont tes amis!

  9. #9
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 868
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 868
    Par défaut
    Citation Envoyé par flipper203
    d'accord, mais vu qu en fonction du type, j effectue une ecriture dans un fichier du parametre que je recois et que a facon de l ecrire dépend de son type, je ne peut pas utiliser les templates.
    Merci pour votre aide
    Tu peux spécialiser une template, en fonction des besoins.
    De plus, si tu écris dans un fichier, les opérateurs de flux >> et << sont déjà écrits de telle façon qu'ils autorisent les différents types d'argument, donc je pense que c'est une bonne solution pour toi

  10. #10
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    http://c.developpez.com/faq/cpp/?pag...TION_surcharge
    Une fonction template, en tant que tel, ça ne sert à rien, la spécialisation d'une telle fonction est utilisé en dernier par le compilateur pour sélectionner les candidats ! Le plus simple dans ton cas et le mieux, c'est la surcharge.

  11. #11
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par flipper203
    mais quelle est la difference entre un template et la surcharge d'une fonction? C'est le fait que pour le template, quelque soit le type le code de la fonction sera le meme alors que pour la surcharge, le code peut etre different?
    Pour une fonction, c'est exactement ça

    L'exemple donné pour << est parlant, c'est en fait une fonction template pour le flux utilisé, mais c'est une surcharge pour le type de données à afficher.

  12. #12
    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
    S'il a besoin des deux dans son programme, alors le compilo va générer deux fonctions.
    C'est plus rapide qu'écrire les surcharges, non?

  13. #13
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 66
    Par défaut
    Citation Envoyé par KiLVaiDeN
    Tu peux spécialiser une template, en fonction des besoins.
    De plus, si tu écris dans un fichier, les opérateurs de flux >> et << sont déjà écrits de telle façon qu'ils autorisent les différents types d'argument, donc je pense que c'est une bonne solution pour toi
    Oui, enfin j ecris dans des fichier de type specifique avec des fonctions issues d'une librairie dans laquelle << et >> ne marche pas :-s

  14. #14
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par poukill
    S'il a besoin des deux dans son programme, alors le compilo va générer deux fonctions.
    C'est plus rapide qu'écrire les surcharges, non?
    Sauf s'il doit la réécrire parce que le comportement interne est différent, il faudra alors une spécialisation, et alors la spécialisation n'a pas la priorité sur d'autres fonctions.

  15. #15
    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
    OK je suis d'accord, sauf s'il ne fait qu'écrire dans un fichier.
    Là les template sont bien suffisant et plus rapides à écrire...

    Sinon, il faudra passer par la surcharge. C'est à lui de voir ce qu'il veut faire.

  16. #16
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 66
    Par défaut
    Bon, bah je suis parti sur la surcharge vu que la librairie d ecriture de fichier est "limitée"

  17. #17
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    En gros :
    * un même code pour des types différents => fonction template. Cela factorise le code et fait moins de trucs à maintenir.

    * un code différent pour des types différents => deux possibilités :
    - spécialisation template sur des classes (!)
    - surcharge de la fonction
    (la spécialisation template de fonctions n'est pas encore au point (/acceptée ?) pour être utilisée.

    Sinon, pour isDouble, ... pas besoin de cela. En C++ on peut détecter ce genre de choses à la compilation.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  18. #18
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 66
    Par défaut
    Bon, sinon un peu dans le meme sujet, j ai un probleme, une fonction me retourne un void*, car elle peut me retourner un string* ou bien un double*, mais comment faire dans la fonction appelante, car il faut caster l appel de la fonction pour recuperer la variable retournée, mais je ne connais pas à la base le type du retour de ma fonction (appelé)

  19. #19
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Si c'est la même fonction, avec les mêmes arguments, qui peut renvoyer un string* ou un double*, il y a peut-être autre chose à faire, non ?
    En tout cas, il existe boost::any qui peut êut-être faire ton affaire.

  20. #20
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 66
    Par défaut
    oui mais j ai besoin des meme arguments dans les deux cas, et on ne peut surcharger une fonction avec son type de retour....ce qui m embete un pue, d'ou le void*

Discussions similaires

  1. Réponses: 5
    Dernier message: 14/07/2010, 10h34
  2. Réponses: 9
    Dernier message: 10/05/2010, 21h35
  3. Detecter le type d'un navigateur dans une jsp
    Par air75 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 27/05/2009, 12h00
  4. Réponses: 30
    Dernier message: 27/03/2008, 15h02
  5. Réponses: 11
    Dernier message: 18/02/2007, 15h37

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