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

++