C++ 0x a déconseillé l'utilisation de vieux classeurs tels que bind1st
et bind2nd
en faveur de std::bind
générique. C++ 0x lambdas se lient bien avec std::bind
mais ils ne lient pas avec bind1st classique et bind2nd car par défaut lambdas n'ont pas de type typede imbriqué tel que argument_type
, first_argument_type
, second_argument_type
et result_type
. Donc je pensais que std::function
peut servir comme un moyen standard pour lier lambdas aux anciens liants, car il expose les typedefs nécessaires. Cependant, l'utilisation de std::function
est difficile à utiliser dans ce contexte car elle vous oblige à épeler le type de fonction tout en l'instanciant.Utilisation de classeurs obsolètes et C++ 0x lambdas
auto bound =
std::bind1st(std::function<int (int, int)>([](int i, int j){ return i < j; }), 10); // hard to use
auto bound =
std::bind1st(std::make_function([](int i, int j){ return i < j; }), 10); // nice to have but does not compile.
Je ne pouvais pas trouver un générateur d'objet pratique pour std::function
. Quelque chose comme std::make_fuction
serait bien d'avoir. Est-ce qu'une telle chose existe? Sinon, y a-t-il une autre meilleure façon de lier les lamdas aux liants classiques?
Notez que l'utilisation de classeurs classiques avec lambdas peut être utile pour les bibliothèques héritées qui s'attendent à ce que leurs types d'objets de fonction exposent les typedefs mentionnés ci-dessus. Donc, je ne pense pas que Vanilla Lambdas peut être utilisé avec de telles bibliothèques. – Sumant