Pergunta

O que pode ser a melhor maneira de começar a programar usando bibliotecas boost lambda.

Foi útil?

Solução

A permanência dentro dos limites da linguagem C ++ e bibliotecas, gostaria de sugerir primeiro se acostumar a programação usando modelos de função algoritmo STL, como se o uso mais comum que você terá para boost :: lambda é substituir as classes functor com expressões inlined inline.

A própria documentação da biblioteca lhe dá um exemplo up-front do que ele está lá para:

for_each(a.begin(), a.end(), std::cout << _1 << ' ');

onde std::cout << _1 << ' ' produz um objeto de função que, quando chamado, escreve seu primeiro argumento para o fluxo cout. Isso é algo que você poderia fazer com um functor personalizado classe, std::ostream_iterator ou um loop explícita, mas boost :: vitórias lambda em concisão e clareza provavelmente -. Pelo menos se você são utilizados para os conceitos de programação funcional

Quando você (excesso) usar o STL, encontra-se gravitando em direção a boost :: bind e boost :: lambda. Ele vem em muito útil para coisas como:

std::sort( c.begin(), c.end(), bind(&Foo::x, _1) < bind(&Foo::x, _2) );

Antes de chegar a esse ponto, não tanto. Então algoritmos uso STL, escrever seus próprios functors e depois traduzi-las em expressões de inline usando boost :: lambda.

Do ponto de vista profissional, eu acredito que a melhor maneira de começar com boost :: lambda é fazer com que o uso de boost :: bind compreendido e aceite. Uso de espaços reservados em um impulso :: bind aparência expressão muito menos mágica do que "naked" espaços reservados boost :: lambda e achados mais fácil aceitação durante revisões de código. Indo além da utilização básica boost :: lambda é bastante provável que você obtenha dor de seus colegas de trabalho a menos que você está em um sangramento-edge C ++ loja.

Tente não ir ao mar -. Há são vezes quando e lugares onde um for-circuito realmente é a solução certa

Outras dicas

Depende. Você já está bem versado em conceitos de programação funcional? Se não, eu sugiro que você começar em uma linguagem que é projetado para programação funcional em vez de uma linguagem procedural com características funcionais grampeados por diante. Se você não está acostumado a codificação em um estilo funcional (não é mais difícil , necessariamente, mas é definitivamente diferente), então você vai gastar mais tempo lutando contra a sintaxe e não há tempo a aprender a fazer outras coisas .

Como para onde começar, eu cortei meus dentes funcionais em Scheme, mas há uma abundância de boas opções.

Se você estiver trabalhando com um compilador razoavelmente recente, você pode usar boost. Se ele não está em sua máquina já, instalá-lo (sudo apt-get install libboost-dev em Unbuntu, obter os binários de boost.org se você estiver no Windows). Leia a doc 's, em seguida, olhar para o seu já existente código para situações em que você pode usá-los. Você tem um monte de duplicação de código que poderia ser eliminado se você parametrizada uma função com um pequeno pedaço de código, por exemplo?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top