Bonjour,
J'aimerais capturer des paramètres template variadiques pour les utiliser dans une fonction lamba, mais g++ 4.5.2 sous Linux (Ubuntu 11.04) n'a pas l'air d'apprécier...
me donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 template <typename InputIterator, typename ResultType, typename... Args> void apply(InputIterator first, InputIterator last, ResultType (std::iterator_traits<InputIterator>::value_type::*f)(Args...), Args&&... args) { typedef typename std::iterator_traits<InputIterator>::value_type value_type; std::for_each(first, last, [&](value_type const& obj) { return (obj.*f)(std::forward<Args>(args)...); }); }Par contre, code fonctionne compile bien :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 toto.cpp:9:78: error: parameter packs not expanded with `...' toto.cpp:9:78: note: `args'
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 template <typename InputIterator, typename ResultType, typename... Args> void apply(InputIterator first, InputIterator last, ResultType (std::iterator_traits<InputIterator>::value_type::*f)(Args...), Args&&... args) { for( ; first != last; ++first) ((*first).*f)(std::forward<Args>(args)...); }
J'imagine que le problème vient du fait que j'essaie de capturer des rvalue reference par référence.
Est-ce que c'est bien le cas ?
Y a-t-il un moyen de faire passer les paramètres template via la fonction lambda ?
Partager