Hello,
Dans Boost.Accumulator, on peut apercevoir l'utilisation de templates variadiques.
Or, je croyais que cette fonctionnalité n'était apportée que par C++11.
Quelqu'un peut-il m'éclairer sur ce point ?
Hello,
Dans Boost.Accumulator, on peut apercevoir l'utilisation de templates variadiques.
Or, je croyais que cette fonctionnalité n'était apportée que par C++11.
Quelqu'un peut-il m'éclairer sur ce point ?
Bonjour,
Oui c'est une fonctionnalité du C++2011, mais on sait l'émuler (pour l'utilisateur) :
Et en rajoutant de la méta-prog préprocesseur (boost::pp), on arrive à quelque chose de plus propre (les répétitions pour les spécialisations et le nombres maximum de paramètres sont générés par le préprocesseur) :
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 struct null_type; template<class =null_type, class =null_type, class =null_type, class =null_type> struct Test; template<class T1> struct Test<T1> { /*code*/ }; template<class T1, class T2> struct Test<T1,T2> { /*code*/ }; template<class T1, class T2, class T3> struct Test<T1,T2,T3> { /*code*/ };
Je ne sais pas si c'est exactement comme ca que fonctionne boost::accumulator, mais c'est une solution viable il me semble.
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<boost/preprocessor/repetition/repeat.hpp> #include<boost/preprocessor/repetition/enum_params.hpp> #include<boost/preprocessor/repetition/enum_params_with_a_default.hpp> #define MAX_PARAM 10 struct null_type; template<BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(MAX_PARAM, class T, null_type)> struct Test; #define VARIADIC_def(z,n,unused) \ template<BOOST_PP_ENUM_PARAMS(n,class T)> \ struct Test<BOOST_PP_ENUM_PARAMS(n,T)> \ { }; BOOST_PP_REPEAT(MAX_PARAM,VARIADIC_def,~)
Salut,
Cf ici.
Ressources proposées par 3DArchi - Les fonctions virtuelles en C++ - Cours et tutoriels C++ - FAQ C++ - Forum C++.
OK, merci !
Je suis encore intrigué par la syntaxe "...", mais il faudrait que je regarde le code Boost, qui n'est actuellement pas installé sur mon PC.
Les ... dans la liste des paramètre template dans la doc veulent juste dire qu'on peut mettre plus de paramètre, il ne font pas partie de la syntaxe du langage (pas sous cette forme du moins).
Si tu ouvres le code de boost tu ne retrouveras pas ces ... dans la liste des paramètre template. Loufoque dans le lien donné par 3DArchi cite les deux méthodes pour simuler les variadics, le code que j'ai donné (le second) est une répétition horizontale.
Partager