Подтвердить что ты не робот

Может ли каррирование использоваться с лямбда-функциями?

Эта часть кода не скомпилируется, и я не знаю, является ли это потому, что это невозможно, lambdas не наследует от binary_function, или просто я ошибаюсь в синтаксисе

#include <functional>

int main(int argc, const char *argv[])
{
   auto lambda = [](int x, int y) -> int { return x + y; };
   auto sumFive = std::bind1st(lambda, 5); 

   return 0;
}
4b9b3361

Ответ 1

Использование:

auto sumFive = std::bind(lambda, 5, std::placeholders::_1);

Пожалуйста, забудьте полностью о bind1st и binary_function и т.д. Это были костыли в старом С++ из-за отсутствия лямбда и вариативных шаблонов. В С++ 11 используйте std::function и std::bind.

Ответ 2

std::bind1st и std::bind являются избыточными в С++ 11. Просто используйте другую лямбду:

auto lambda = [](int x, int y) { return x + y; };
auto sumFive = [&](int y) { return lambda(5, y); };

Это проще и проще (не нужно знать, что делает std::bind или что для него std::placeholders), более гибким (он может поддерживать любое выражение, а не только привязку параметров), не требует заголовков поддержки и будет вероятно, скомпилировать еще немного быстрее.