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.

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top