c++ - stephen - ¿Se puede utilizar el curry con funciones lambda?
que es el curry en mexico (2)
Utilizar:
auto sumFive = std::bind(lambda, 5, std::placeholders::_1);
Por favor, olvídese por completo acerca de bind1st
y binary_function
, etc. Esas eran muletas en el antiguo C ++ debido a la falta de lambdas y plantillas variadas. En C ++ 11, use std::function
y std::bind
.
Este fragmento de código no se compila y no sé si se debe a que no se puede hacer, los lambdas no heredan de binary_function o es solo que estoy obteniendo una sintaxis incorrecta
#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;
}
std::bind1st
y std::bind
son redundantes en C ++ 11. Solo usa otro lambda:
auto lambda = [](int x, int y) { return x + y; };
auto sumFive = [&](int y) { return lambda(5, y); };
Esto es más claro y simple (no es necesario saber qué hace std::bind
o para qué son los std::placeholders
), más flexible (puede admitir cualquier expresión, no solo el enlace de parámetros), no requiere encabezados, y probablemente compilar un poco más rápido también.