"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Lambdas vs. Bind em C++: quando você deve escolher cada um?

Lambdas vs. Bind em C++: quando você deve escolher cada um?

Publicado em 2024-11-09
Navegar:610

Lambdas vs. Bind in C  : When Should You Choose Each?

Lambdas vs. Bind em C: Polimorfismo e Eficiência

Ao comparar o uso de C 0x lambdas e std::bind para tarefas semelhantes , a escolha entre os dois pode ser influenciada por fatores como polimorfismo e eficiência.

Bind vs. Lambda em detalhes

Considere o exemplo a seguir onde lambda e bind são usados ​​para gerar números aleatórios usando uma distribuição e mecanismo:

// Using lambda
auto dice = [&]() { return distribution(engine); };

// Using bind
auto dice = bind(distribution, engine);

Polimorfismo

Ao contrário dos lambdas, que são monomórficos (ou seja, têm tipos fixos), std::bind permite polimórficos comportamento. Isso significa que bind pode ser usado para criar funções com tipos desconhecidos, conforme demonstrado abaixo:

struct foo {
  typedef void result_type;

  template 
  void operator()(A a, B b) {
    cout 

Neste exemplo, os tipos de a e b são deduzidos em tempo de execução quando f é invocado. Essa flexibilidade não está disponível com lambdas.

Eficiência

Em geral, lambdas tendem a ser mais eficientes do que bind quando as variáveis ​​capturadas são usadas por valor. Isso ocorre porque lambdas capturam variáveis ​​diretamente, enquanto bind cria um objeto de fechamento que faz referência às variáveis ​​capturadas. No entanto, bind pode oferecer vantagens quando as variáveis ​​capturadas são grandes ou quando a função é chamada com frequência.

Conclusão

A escolha entre lambdas e bind depende dos requisitos específicos do aplicativo. Lambdas fornecem polimorfismo e são eficientes para capturar pequenas variáveis ​​do tipo valor. Bind oferece maior flexibilidade e pode ser preferível ao lidar com funções grandes ou chamadas com frequência.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3