comment utiliser foncteurs liant et bind2nd?
Question
Comment utiliser binder2nd, bind2nd et bind1st? Plus précisément quand les utiliser et sont-ils nécessaires? De plus, je suis à la recherche de quelques exemples.
La solution
Ils ne sont jamais, strictement parlant, nécessaires , comme vous pouvez toujours définir votre propre objet foncteur personnalisé; mais ils sont très pratique exactement pour éviter avoir à définir dans les cas simples foncteurs personnalisés. Par exemple, supposons que vous voulez compter les éléments dans un std::vector<int>
qui sont > 10
. Vous pouvez bien sûr code ...:
std::count_if(v.begin(), v.end(), gt10())
après avoir défini:
class gt10: std::unary_function<int, bool>
{
public:
result_type operator()(argument_type i)
{
return (result_type)(i > 10);
}
};
mais pensez combien il est le code beaucoup plus pratique, au lieu:
std::count_if(v.begin(), v.end(), std::bind1st(std::less<int>(), 10))
sans aucune classe foncteur auxiliaire devant être défini -)
Autres conseils
Les liants sont la voie C ++ de faire curryfication . BTW, consultez Boost bibliothèque Bind