jesus_christ votre nouveau dieu | c'est techniquement possible à coups de void* et de cast hasardeux, mais bon là je ne lui expliquerais pas, il doit repenser son code.
Code :
- static int toto(int a, bool b);
- static void titi(int* p);
- static char tutu(double d);
- enum { TOTO, TITI, TUTU };
- template<int n>
- struct MapFunction {};
- template<>
- struct MapFunction<TOTO>
- {
- typedef int (*fptr)(int, bool);
- static const fptr s_ptrfun = &toto;
- }
- template<>
- struct MapFunction<TITI>
- {
- typedef void (*fptr)(int*);
- static const fptr s_ptrfun = &titi;
- }
- template<>
- struct MapFunction<TUTU>
- {
- typedef char (*fptr)(double);
- static const fptr s_ptrfun = &tutu;
- }
- // et comme ça pour chaque fonction, de toute façon t'es obliger de les
- // connaître à la compil, alors autant mettre ça dans un template
- // au lieu de
- _assocFonctAttrib["toto"] = &toto;
- _assocFonctAttrib["toto"](42, true);
- // tu fais
- MapFunction<TOTO>::s_prtfun(42, true);
|
PS : j'ai un doute, un pointeur de fonction static peut-il être utilisé comme constante entière littérale (pour le static const) ? Si non, alors ça compile pas mais de toute façon c'est crade |