Bonjour à tous!
Tout d'abord, merci pour le forum, que je consulte de plus en plus régulièrement, et qui est une mine d'informations!
Je poste aujourd'hui parce que j'ai un problème sur lequel je suis bloqué depuis un moment. Il s'agit de conception, et mes connaissances étant limitées en POO, je me permets de faire appel à votre aide!
Je développe un programme ou l'utilisateur peut définir des fonctions mathématiques. Il s'agit de fonctions qui seront ensuite évaluées à l'intérieur du code. On a donc un truc dans ce gout-là :
Code maclasse.hpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 #include "eval_func.tpp" class MaClasse { private : type2 eval_type_2(const type2&); type1 eval_type_1(const type1&); template<class T> T eval_func(const T&); };
Les fonctions "eval_type_1" et "eval_type_2" font toutes les deux appel à "eval_func", mais avec un type différent, d'où l'utilisation de "eval_func" en template.
Code eval_func.tpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 #include "mafonction.tpp" template<class T> T MaClasse::eval_func(const T& val) { T resultat; resultat = mafonction(val); return resultat; }
Les extensions .tpp désignent les fichiers de définition de fonctions template. Je crois qu'on pourrait les mettre également dans des .hpp, mais je trouve ça moins clair... Il me semble en revanche qu'on ne peut pas les mettre dans des .cpp, car on ne peut pas compiler une fonction template avant de savoir quel type sera utilisé au moment de l'appel.
Pour le moment, à chaque fois que l'utilisateur donne une nouvelle définition pour "mafonction()", je suis obligé de recompiler "maclasse". J'aimerais changer ça.
J'aurais aimé ne plus avoir besoin d'inclure les fichiers définissant les fonctions (.tpp) dans "maclasse.hpp", et utiliser des pointeurs de fonctions. Dans l'idéal j'aurais une fonction SetFuncPointer() dans "maclasse" qui serait utilisée dans le main :
Seulement, on ne peut pas utiliser de pointeurs vers des fonctions template sans donner le type d'appel... Cela m'oblige donc à créer autant de SetFuncPtr_...() que de types d'appel de la fonction concernée...
Code main.cpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 #include "mafonction.tpp" int main() { maclasse A; A.SetFuncPointer(&mafonction); type1 var1; var1 = A.eval_type_1(var1); type1 var2; var2 = A.eval_type_2(var2); }
Ma question :
Comment supprimer mes inclusions de fichiers .tpp dans "maclasse.hpp", et les mettre dans main.cpp, afin de ne recompiler que "main.cpp" lorsque l'utilisateur modifie "mafonction()"?
Je vous remercie d'avance pour votre aide!![]()
Partager