logo
Contato | Sobre...        
rebarba rebarba

Rodrigo Strauss :: Blog

follow us in feedly

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 | e-mail | em 04/08/2015 | #
Muito bom, vc pretende falar sobre Boost aqui no blog?
Rodrigo Strauss | website | e-mail | em 05/08/2015 | #
Sim, com certeza. Você pensa em algum tópico em específico?
Amilson Júnior | e-mail | 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 | e-mail | 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
Algo a dizer?
Nome:


Site:


E-mail:


Escreva o número vinte e seis:


 Não mostre meu e-mail no site, não serve pra nada mesmo...

Comentário





Os comentários devem ser sobre assuntos relativos ao post, eu provavelmente apagarei comentários totalmente offtopic. Se quiser me enviar uma mensagem, use o formulário de contato. E não esqueça: isso é um site pessoal e eu me reservo o direito de apagar qualquer comentário ofensivo ou inapropriado.
rebarba rebarba
  ::::