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.