Bonjour
Voila je rencontre un petit souci :
Comment contourner (avec classe) l'impossibilitee de compiler des methods templates virtuels .
Dans une cadre de l'abstraction d'un loader de .dll/.so j'ai fais une classe abstraite DLHandler qui peut avoir pour fille SOLoader ou DLLLoader etc ...
Mais il y a un souci au niveau de la method qui abstrait dlsym et GetProcAddress (je l'appelle getFunction()).
Man : dlsym et GetProcAddress retournent un poiteur sur la fonction contenue dans la librairie dynamique. Elle en param prend le nom de cette fonction.
le but est de pouvoir faire ca :
pour cela la classe abstraite DLHandler doit resembler a ca :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 //type de la fonction demandee typedef int (*my_fct_ptr)(void); my_fct_ptr my_fct; DLHandler obj; //init obj ... my_fct = obj.getFunction<my_fct_ptr>("uneFctC");
Donc comme vous l'avez surement remarque, le souci vient du type mystere.
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 class DLHandler { private: type_mystere _type; //... public: DLHandler(type_mystere type) { _type = type; } template <typename type> type getFunction(const std::string name) { //appelle a la fonction contenue dans la fille en utilisant le type mystere } //... }
J'ai donc deux solutions pour resoudre ce souci (si y'en a d'autres je suis open) :
1) Prevoir des pointeurs sur methods dans DLHandler pour toutes les class filles possibles de DLHandler. C'est simple mais je trouve extrement moche.
2) Je fais un poiteur sur method generique qui peut etre utilise pour toutes les classes filles. Ca c'est classe mais dans ce cas je ne sais pas faire !
En gros on arrive a la question :
Est il possible de faire un poiteur sur method generique ?
Ces methods auront toutes le meme prototype, le meme nom mais ne seront pas dans la meme class !
Y'a t'il une possibilitee ?
Merci d'avance pour votre reponse
Bonne journee
Partager