Bonjour,
je suis en train de porter une application écrite en C++Builder en Visual C++,
j'ai a peu près réussi à m'en sortir, mais j'ai le soucis suivant :
Le code existant utilise pas mal d'appels vers des pointeurs de fonction membre,
cela est possible sous C++Builder en utilisant le mot clef __closure,
exemple (juste pour montrer la syntaxe) :
existe-t-il une méthode aussi concise sous visual C++ pour faire cela ?
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 #include <string> #include <ostream> typedef void (__closure *TPointeurFonction) (std::string const &msg); class CDummy { public: void exemple (std::string const &msg) { std::cout << msg << "\r\n"; } }; int main(int argc, char* argv[]) { CDummy dummy; TPointeurFonction ptr = (&dummy.exemple); ptr ("hello"); return 0; }
j'ai pas mal recherché dans les FAQ et le forum, et les solutions tournent toujours autour de la même chose :
* passer les fonctions en statiques ou en fonctions libres
(je ne peux pas le faire)
* utiliser boost (je ne veux pas le faire)
* au lieu d'utiliser un pointeur de fonction membre:
1- passer par une interface qui définit la fonction (virtuelle) à appeler
2- remplacer le pointeur de fonction par un pointeur vers un objet de l'interface
3- au lieu d'appeler le pointeur de fonction membre, on appelle la fonction virtuelle de l'objet interface ...
dans tous les cas, les méthodes proposées me semblent induire énormément de modifications dans l'existant ....
Quelqu'un aurait il une solution miracle, pas trop coûteuse ?
Merci !
Partager