Por onde começar a aprender a usar as bibliotecas do Boost?


16

O Boost tornou-se disponível recentemente no projeto em que estou trabalhando e não tenho muita experiência com ele. A biblioteca possui tantas partes e recursos que é difícil saber por onde começar a aprendê-la - especialmente porque tentarei aprender enquanto cria o código de produção (para que não possa me atrapalhar muito).

Eu apreciaria muito se alguém pudesse listar entre 3 e 5 recursos que são muito úteis em geral, programação diária e indicar por que eles são úteis. Então eu posso começar a aprender e usá-los - pelo menos me dará uma posição na biblioteca e um lugar amigável para começar a aprendê-lo / aplicá-lo :)

Desde já, obrigado!


Eu não entendo a frase 'ponto de apoio da biblioteca' neste contexto. O que há de errado com os livros? Há alguns sobre o assunto dos vendedores comuns, tê-los na estante de suas equipes deve ser uma obrigação.
aquaherd

Eu leio o tempo todo para programar - não tenho tempo para ler um livro ou guia de referência sobre o impulso de volta para a frente para saber tudo o que ele tem e se é útil neste momento. Gostaria de começar a usá-lo aqui e ali e buscá-lo lentamente enquanto trabalhava, e queria alguns exemplos principais de componentes de impulso realmente úteis. Por exemplo, o Effective C ++ de Scott Meyers fala sobre shared_ptr non stop (e muito pouco mais) porque é muito bom. O que mais é extraordinariamente útil no impulso?
John Humphreys - w00te

Pessoalmente, gostei muito das macros BOOST_FOREACH, dos padrões de observador / assinante, das expressões regulares, dos analisadores de data / hora (facetas), mas os encontrei por acaso enquanto modificava o impulso existente usando o código ou como DeadMG delineou. Eu apenas arranhei a ponta do iceberg que é um impulso, mas parecia uma continuação natural do STL.
aquaherd

Respostas:


8

Se você estiver usando um compilador pré-TR1, ponteiros inteligentes

boost::shared_ptr
boost::weak_ptr
boost::scoped_ptr 

boost::scoped_array
boost::shared_array

Se o seu compilador já tiver ponteiros inteligentes, use-os.
O motivo é óbvio que o C ++ sem ponteiros inteligentes não é basicamente o C ++

As bibliotecas boost ptr_contaier.

Todos os contêineres da STL foram reimplementados especificamente para conter ponteiros. Os contêineres não são apenas proprietários dos ponteiros, de modo que, quando o contêiner é destruído, ele destrói automaticamente todos os ponteiros. MAS também fornece acessos a elementos como referências normais a objetos (não ponteiros), facilitando o uso dos objetos em algoritmos padrão, sem a função de wrapper.

As bibliotecas lambda boost. (veja o comentário abaixo)

Os functores e ligantes STL são bons para coisas simples. Mas o boost :: lambda deu o próximo passo e simplificou bastante as coisas ao usar os algoritmos padrão.

boost :: any e boost :: variant

Quando você precisa segurar objetos sem querer saber seu tipo exato.

Multi Contentores

Contêineres que permitem várias maneiras diferentes de acessar os elementos.
Longe vão os dias em que você tem um vetor de objetos e um mapa separado para um vetor de pesquisa rápida. Isso reduz o padrão que você precisa escrever para manter os dois contêineres ao inserir / excluir elementos nos contêineres.

boost :: lexical_cast

Provavelmente o menos útil na vida real, mas muito divertido de brincar é o boost :: lexical_cast. Ele converte qualquer objeto em / de uma string (desde que esse tipo tenha os operadores << e >> apropriados definidos). Muito útil para despejar mensagens de erro ao remover erros.


1
O Boost.Phoenix substituiu oficialmente o Boost.Lambda, que agora é considerado obsoleto. Por favor, recomende o primeiro e não o último para o novo código. : -]
ildjarn

16

O impulso não é uma estrutura, nem uma biblioteca. É uma coleção de bibliotecas com controle de qualidade e revisão por pares. Você não aprende Boost. As bibliotecas são individuais - quando você precisa de algo, verifica se está no Boost, se estiver, e aprende essa biblioteca. É isso aí. Você não pode entender o boost :: opcional de entender o boost :: variant.


4
Você poderia dizer que o impulso é um rótulo de qualidade e um conjunto de distribuição.
Klaim

1

Boost é uma coleção de bibliotecas. Da próxima vez que você fizer um kata de código, escolha uma biblioteca no Boost que ache que pode ajudá-lo e use-a. A documentação é muito boa e você não deve ter problemas em escolher usos simples. Os mais complexos surgirão quando você tentar fazer coisas mais inteligentes.

Exemplo: um singleton seguro de thread com boost :: thread call_once.

Exemplo: leia um arquivo de configuração da chave: value usando o tokenizer.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.