Bonjour,
comment faire pour convertir des pointeurs de fonction ?
Comme ça :àCode:void* (*)(void*)
C'est pour porter un programme.Code:int (*)(int, void*)
Merci ;)
Version imprimable
Bonjour,
comment faire pour convertir des pointeurs de fonction ?
Comme ça :àCode:void* (*)(void*)
C'est pour porter un programme.Code:int (*)(int, void*)
Merci ;)
Bonjour,
Je ne comprends pas pourquoi tu veux faire une telle conversion, mais tu peux la forcer avec reinterpret_cast :
C'est peut-être plus clair avec des typedefs :Code:
1
2
3 void* (*From)(void*); int (*To)(int, void*); To=reinterpret_cast<int (*)(int, void*)>(From);
Code:
1
2
3
4 typedef void* (*fFrom)(void*); typedef int (*fTo)(int, void*); fFrom From; fTo To=reinterpret_cast<fTo>(From);
Merci, je testerais plus tard. C'est pour créer une fonction de création de thread "universelle"
Voila une solution qui devrai mieux fonctionner que le reinterpret_cast:
pour l'utiliser:Code:
1
2
3
4
5
6
7
8
9
10
11
12 typedef void* (*OldThread) (void* p); template <OldThread P> struct ConvertThread { static int fct(int, void* p) { P(p); return 0; } };
Code:
1
2
3
4
5
6
7
8 void* fct(void* p) { std::cout << (char*)p << std::endl; return p; } int (*f)(int, void*) = ConvertThread<fct>::fct;
le cast de pointeur de fonction, c'est un peu genre undefined behavior et reintrpret_cast n'est pas fait pour ca :o
Aquaz et Joel F ont raison: A function pointer cast is a bug waiting to happen
la solution du wrapper est plus sure.