Rodrigo Strauss :: Blog
C++11: lambda
Lambda é uma função inline, anônima, que você pode definir dentro de qualquer lugar no código.
Usos:
- Manter o código que trata o callback de uma função perto da chamada da função, para deixar o código mais legível;
- Definir o código da função de uma thread diretamente na chamada que cria a thread, também para legibilidade;
- Substituir os functors de forma mais simples, já que as lambdas no C++ podem guardar estado também. Ajuda na legibilidade do código, também devido à proximidade do código. Eu já expliquei functors antes;
- Nunca mais precisar usar Boost.Bind, que gera aproximadamente 375 erros de compilação se você esquece uma vírgula ou algum _1.
Vamos à sintaxe:
Por partes:
- Captura: nessa parte você determina quais varíaveis dos escopos exteriores estarão disponíveis dentro do lambda. Na maioria das linguagens (como JavaScript e C#) a captura é implícita, ou seja, é só usar a variável dentro do lambda que ela está capturada. Em C++, pra variar, você tem mais controle sobre isso, podendo especificar ainda se a captura será por valor ou por referência;
- Parâmetros: Aqui definimos os parâmetros. Funciona da mesma forma que a declaração de parâmetros de uma função;
- Tipo de retorno: Essa parte é opcional, não precisa colocar caso essa lambda não retorne nada. Essa é a nova sintaxe C++ para definir tipo de retorno, que fica depois dos parâmetros. Isso possibilita, entre outras coisas, o uso de decltype() em cima dos parâmetros e coisas assim. Dá pra escrever um artigo inteiro sobre isso, então vou omitir detalhes sórdidos por enquanto;
- Corpo da função: é a parte do [insira seu código fonte aqui]. Você escreve seu código como em uma função comum, com return e tudo mais;
Como um trecho de código vale mais que 0,14% de álcool no sangue, vamos ao que interessa:
Em 03/08/2015 09:53, por Rodrigo Strauss





Muito bom, vc pretende falar sobre Boost aqui no blog?