significa - paso por parametros c++
c++ 0x: forma correcta de recibir un lambda como parámetro por referencia (2)
No puedes tener un parámetro auto
. Básicamente tienes dos opciones:
Opción # 1: use la std::function
como lo ha mostrado.
Opción n. ° 2: use un parámetro de plantilla:
template<typename F>
void f(F &lambda) { /* ... */}
La opción n. ° 2 puede, en algunos casos, ser más eficiente, ya que puede evitar una posible asignación de pila para el objeto de función lambda incrustado, pero solo es posible si se puede colocar f
en un encabezado como función de plantilla. También puede aumentar los tiempos de compilación y la huella de I-cache, como cualquier plantilla. Tenga en cuenta que puede no tener ningún efecto también, ya que si el objeto de la función lambda es suficientemente pequeño, puede representarse en línea en el objeto std::function
.
¿Cuál es la forma correcta de definir una función que recibe un int->int
lambda por referencia?
void f(std::function< int(int) >& lambda);
o
void f(auto& lambda);
No estoy seguro de que la última forma sea sintaxis legal.
¿Hay otras formas de definir un parámetro lambda?
Yo usaría la template
como:
template<typename Functor>
void f(Functor functor)
{
cout << functor(10) << endl;
}
int g(int x)
{
return x * x;
}
int main()
{
auto lambda = [] (int x) { cout << x * 50 << endl; return x * 100; };
f(lambda); //pass lambda
f(g); //pass function
}
Salida:
500
1000
100
Demostración: http://www.ideone.com/EayVq