Bonjour à tous,
Je suis en train de faire un test simple de capture d'une fonction par une autre.
Ça c'est la version à l'ancienne, le truc c'est qu'il faut que je créer autant de surcharge que le nombre max de paramètre de la méthode que je veux capturer. Donc je me suis dit autant passer par les template variadic:
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
21
22
23 template<typename ResultType, typename ParameterType1> void CaptureMethod(ResultType(*func)(ParameterType1)) { } template<typename ResultType, typename ParameterType1, typename ParameterType2> void CaptureMethod(ResultType(*func)(ParameterType1, ParameterType2)) { } template<typename ResultType, typename ParameterType1, typename ParameterType2, typename ParameterType3> void CaptureMethod(ResultType(*func)(ParameterType1, ParameterType2, ParameterType3)) { } int f1(int) { return 0; } int f2(int, int) { return 0; } int f3(int, int, int) { return 0; } int main() { CaptureMethod(f1); CaptureMethod(f2); CaptureMethod(f3); return 0; }
Maintenant j'aimerais pouvoir capturer des fonctions qui ont un nombre de paramètres variables:
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 template<typename ResultType, typename... ParametersTypes> void CaptureMethod(ResultType(*func)(ParametersTypes...)) { } int f1(int) { return 0; } int f2(int, int) { return 0; } int f3(int, int, int) { return 0; } int f10(int, int, int, int, int, int, int, int, int, int) { return 0; } int main() { CaptureMethod(f1); CaptureMethod(f2); CaptureMethod(f3); CaptureMethod(f10); return 0; }
Mais là ça ne compile pas (je suis sous Visual 2017). Est-ce possible de capturer une fonction à nombre de paramètres variables? J'avoue que là je n'ai pas trop d'idées.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 template<typename ResultType, typename... ParametersTypes> void CaptureMethod(ResultType(*func)(ParametersTypes...)) { } int fVariable(...) { return 0; } int main() { CaptureMethod(fVariable); return 0; }
Partager