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 :

problème incompréhensible avec les fonctions templates et non templates


Sujet :

Langage C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Juillet 2011
    Messages : 20
    Points : 23
    Points
    23
    Par défaut problème incompréhensible avec les fonctions templates et non templates
    Bonjour à tous,

    Je vais essayer d'être aussi clair que possible. Mais après une demi journée de recherche je me tourne sur le forum.
    Alors voilà mon objectif est de lire un fichier texte de la forme :
    TSTART=01
    TSTOP=2726
    etc....

    Dans une classe InputParameter je surcharge l'opérateur << comme ceci :
    fichier.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class InputParameter {
    public: int &getIntervalTime();
    private : double m_tStart;
    };
    std::ifstream& operator>>(std::ifstream &in, InputParameter& param);
    fichier.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    std::ifstream& operator>>(std::ifstream &in, InputParameter &param)
    {
        ini init(in);
        init.Set("TSTART", param.getIntervalTime());
        return in;
    }
    Ensuite dans une classe ini je défini mes fonctions Set() pour mon opérateur << comme ceci :
    fichier.h :
    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
    class ini {
    public :
       template <typename T> void Set(std::string const &variable, T &value);
       void Set(std::string const &variable, bool &value);
       void Set(std::string const &variable, std::string &value);
     
    private : "some private method"
    };
     
    // For booleans: reads the variable name and sets its value from file
    inline void ini::Set(std::string const &variable, bool &value)
    {
       "managed some boolean"
    }
     
    // For strings: reads the variable name and sets its value from file
    inline void ini::Set(std::string const &variable, std::string &value)
    {
       "managed some string"
    }
     
    template <typename T>
    void ini::Set(std::string const &variable, T &value)
    {
       managed some natural type eg : int, double, float etc...
    }
    Comme vous pouvez le voir ci dessus, j'ai donc 3 méthodes Set() dont 2 inline et une template.
    Dans le fichier ini.cpp je gère que mes méthodes privées.

    Enfin dans le main.cpp j'ai ceci :

    main.cpp :
    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
    #include <iostream>
    #include "ModelParameters/inputparameter.h"
     
    int main()
    {
        try
        {
            InputParameter param;
            std::ifstream in("someFile.txt");
            in >> param;
        }
        catch(std::exception &e)
        {
           std::cout << "error occured !" << e.what() << std::endl;
        }
     
    }
    Ce code compile mais ne fonctionne pas comme je le souhaite.
    En fait quand je regarde l'auto complétion de code dans Qt, il ne me propose pas ma fonction template, un peu comme si elle était inexistante.
    En mode debug c'est le cas aussi, au lieu d'utiliser ma fonction template :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    template <typename T>
    void ini::Set(std::string const &variable, T &value)
    (comme je traite un double) il utilise la méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    inline void ini::Set(std::string const &variable, std::string &value)
    Donc c'est pas bon !
    Ce qui est encore plus incompréhensible pour moi, c'est que si je commente mes 2 fonctions "normales" (non template) alors la mon programme se comporte correctement et fais ce que je veux ????

    Donc avez vous une piste d'explication pour moi car la je sèche lamentablement.
    Merci d'avance pour ceux qui pourront éclairer mon chemin obscure

    ++

  2. #2
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Juillet 2011
    Messages : 20
    Points : 23
    Points
    23
    Par défaut problème incompréhensible avec les fonctions templates et non templates
    Bonjour à tous,

    Bon après un week end au calme sans toucher au code, j'ai résolu mon problème.
    Il semble que je me suis emmêler les pinceau dans les types de variables que j'essayais de stocker dans mon objet InputParameter. J'ai mis tout ça en ordre et cela fonctionne parfaitement.
    Je devais être fatigué....
    Toujours est il que "l'intellisense de Qt" ne me propose pas ma fonction template c'est peut être ça qui m'a dérouté....

    Merci pour ceux qui ont lu mon message !

    ++ nono

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Règle N°1 : ne jamais faire confiance à Intellisence.
    C'est pratique, mais très très loin d'être infaillible.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/12/2014, 16h48
  2. Problème avec les fonctions
    Par gizida dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/07/2006, 14h15
  3. Réponses: 2
    Dernier message: 10/05/2005, 10h58
  4. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  5. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04

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