Bonsoir,
En voulant impl�menter les algorithmes de la biblioth�ques standards afin de pouvoir les utiliser avec des fonctions prenant un ou plusieurs arguments, je me suis naturellement orient�s vers boost/bind. Un bout de code �tant plus parlant qu'une longue explication, voici ce que j'obtiens pour l'algorithe for_each, acceptant un pointeur de membre prenant lui m�me un argument :
Le probl�me est que boost::bind contient une copie interne des param�tres qu'on lui passe (ici op). DU coup l'avantage de l'utilisation de call_traits est perdu. Ma question est de savoir comment invoquerCode:
1
2
3
4
5 template<Iterator It, class T, class R, class Op> for_each(It first, It last, R (T::*pmf), boost::call_traits<Op>::parameter_type op) { std::for_each(first, last, boost::bind(pmf, _1, op)); }
plut�t que le code pr�c�dent lorsque call_traits<Op>::parameter_type est une r�f�rence. La sp�cialisation de template n'est pas vraiment une option envisageable, �tant donn� qu'avec un pointeur de fonction membre acceptant beaucoup de param�tres, on va devoir �crire beaucoup de code. Idem pour des structures if testant call_traits<Op>::parameter_type. Y'a-t-il une solution plus �l�gante ?Code:
1
2 std::for_each(first, last, boost::bind(pmf, _1, cref(op)))
Merci d'avance.