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:
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:
1 2 3 4 5 6
| std::ifstream& operator>>(std::ifstream &in, InputParameter ¶m)
{
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:
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:
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:
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:
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 :D
++
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