tutorial español c++ lambda const c++11

español - gcc c++11



C++ 0x captura lambda por valor siempre const? (2)

¿Hay alguna manera de capturar por valor y hacer que el valor capturado no const? Tengo un functor de biblioteca que me gustaría capturar y llamar a un método que no es const pero debería serlo.

Lo siguiente no compila pero haciendo que foo :: operator () lo arregle.

struct foo { bool operator () ( const bool & a ) { return a; } }; int _tmain(int argc, _TCHAR* argv[]) { foo afoo; auto bar = [=] () -> bool { afoo(true); }; return 0; }


Existe una forma alternativa de usar mutable (solución propuesta por Crazy Eddie).

Con [=] su bloque captura todos los objetos por valores. Puede usar [&] para capturar todos los objetos por referencia:

auto bar = [&] () -> bool

O puede capturar por referencia solo cierto objeto [=, & afoo] :

auto bar = [=, &afoo] () -> bool

Consulte esta página para obtener información detallada (sección Explicación ): http://en.cppreference.com/w/cpp/language/lambda


Use mutable

auto bar = [=] () mutable -> bool ....

Sin mutable está declarando el operador () del objeto lambda const.