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 :

Code : S�lectionner tout - Visualiser dans une fen�tre � part
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));
}
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 invoquer
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
 
std::for_each(first, last, boost::bind(pmf, _1, cref(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 ?

Merci d'avance.