C ++ 0x устарел использовать старые связующие, такие как bind1st
и bind2nd
, в пользу универсальных std::bind
. C ++ 0x лямбды хорошо связываются с std::bind
, но они не связываются с классическими bind1st и bind2nd, потому что по умолчанию лямбды не имеют вложенных типов, таких как argument_type
, first_argument_type
, second_argument_type
и result_type
,
Поэтому я подумал, что std::function
может служить стандартным способом привязки лямбд к старым папкам, поскольку он предоставляет необходимые typedefs.
Тем не менее, использование std::function
сложно использовать в этом контексте, потому что оно заставляет вас указывать тип функции при ее создании.
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.
Я не смог найти удобный генератор объектов для std::function
. Что-то вроде std::make_fuction
было бы неплохо иметь. Существует ли такая вещь? Если нет, есть ли какой-нибудь другой лучший способ связать лямды с классическими связующими веществами?