logo
Contato | Sobre...        
rebarba rebarba

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


  
 
 
Comentários
Amilso Júnior | em 04/08/2015 | #
Muito bom, vc pretende falar sobre Boost aqui no blog?
Rodrigo Strauss | website | em 05/08/2015 | #
Sim, com certeza. Você pensa em algum tópico em específico?
Amilson Júnior | em 06/08/2015 | #
Sobre threads e Multithreading. Eu ainda não trabalho com C++, mas o que não me entrou na mente foi as threads.. quando usar ou não usar... Se bem que eu não me esforcei muito a aprender, mas ajudaria bastante tu falar sobre. Não encontrei nenhum blog que explica as coisas tão bem quanto o teu. :)
Wanderley Caloni | website | em 07/08/2015 | #
Interessante que agora com <future> é possível realizar chamadas assíncronas com callbacks sem precisar criar nada fora da função: apenas encadeando lambdas.

[]s
rebarba rebarba
  ::::