Dans un tout autre registre, je me suis battu récemment avec la STL, et notamment avec l'absence de copy_if. Ce que je voulais vraiment:
std::copy_if(input.begin(),
input.end(),
std::back_inserter(output),
boost::bind(&Class::predicate, this, _1));
Mais, copy_if ayant (selon Stroustrup) été oublié, il faut faire avec et utiliser remove_copy_if, qui fait exactement l'inverse. Je me suis battu avec des std::not1 et des bind dans tous les sens, sans arriver à faire compiler la chose. En fait, c'était tout bête.
std::remove_copy_if(input.begin(),
input.end(),
std::back_inserter(output),
!boost::bind(&Class::predicate, this, _1));
Pourquoi ça marche? J'avoue que je ne comprends pas vraiment le fonctionnement interne de bind, et que je le vois plus comme un pointeur sur fonction, avec lequel un ! ne fonctionnerait pas. C'est donc assez magique.
Aucun commentaire:
Enregistrer un commentaire