Pergunta

Desde que comecei a usar este site, continuo ouvindo sobre a biblioteca Boost. Gostaria de saber quais são alguns dos principais benefícios da biblioteca Boost (daí que devo usá -la) e quão portátil é a biblioteca de impulso?

Foi útil?

Solução

O Boost é organizado por vários membros do comitê padrão.
Portanto, é um terreno fértil para bibliotecas que estarão no próximo padrão.

  1. É uma extensão para o STL (preenche os bits deixados de fora)
  2. Está bem documentado.
  3. É bem revisado por pares.
  4. Possui alta atividade para que os bugs sejam encontrados e corrigidos rapidamente.
  5. É a plataforma neutra e funciona em todos os lugares.
  6. É de uso gratuito.

Com o TR1 chegando em breve, é bom saber que o Boost já tem muito do solo coberto. Muitas das bibliotecas no TR1 são basicamente adaptadas diretamente dos originais do Boost e, portanto, foram testadas e testadas. A diferença é que eles foram movidos para o espaço para nome STD :: Tr1 (em vez de aumentar).

Tudo o que você precisa fazer é adicionar o seguinte ao padrão dos compiladores Inclua caminho de pesquisa:

<boost-install-path>/boost/tr1/tr1

Então, quando você incluir, os cabeçalhos padrão impulsionarão automaticamente todas as coisas necessárias para o espaço para nome STD :: Tr1

Por exemplo:

Para usar std :: tr1 :: share_ptr, você só precisa incluiru003Cmemory> . Isso lhe dará todos os indicadores inteligentes com um arquivo.

Outras dicas

Você pode simplesmente ler o Aumente as informações de fundo Página para obter uma visão geral rápida de por que você deve usar o Boost e o que pode usá -lo. Vale os poucos minutos que leva.

99% portátil.

Eu diria que possui algumas bibliotecas que são realmente úteis quando você descobre uma necessidade que é resolvida por Boost. Ou você o codifica ou usa uma biblioteca muito sólida. Ter a fonte da Shelve para coisas como Multi-Index, Lambda, Opções de Programa, Regex, Smartptr e Tupla é incrível ...

A melhor coisa é gastar algum tempo passando pela documentação para as diferentes bibliotecas e avaliando se poderia ser útil para você.

Valioso!!

Você recebe muitas das coisas que estão chegando no C ++ 0x. Mas, além dessa generalidade, alguns dos melhores detalhes são simples Biblioteca Regex, uma biblioteca de elenco para lançando de cordas para ints (Elenco lexical):

int iResult = 0;
try
{
    iResult = lexical_cast<int>("4");
}
catch(bad_lexical_cast &)
{
    cout << "Unable to cast string to int";
}

UMA Biblioteca de data/hora, entre outros...

using namespace boost::gregorian;
date weekstart(2002,Feb,1);
date thursday_next = next_weekday(weekstart, Thursday); // following Thursday

Há também um Interface Python (Boost python), um Lexer/analisador DSL (Boost Spirit):

// A grammar in C++ for equations
group       = '(' >> expression >> ')';
factor      = integer | group;
term        = factor >> *(('*' >> factor) | ('/' >> factor));
expression  = term >> *(('+' >> term) | ('-' >> term));

E isso está apenas arranhando a superfície ...

Boost é ótimo, mas apenas interpretar o advogado do diabo aqui estão algumas razões pelas quais você pode não querer usar o Boost:

  • Às vezes, falha em compilar/funcionar corretamente em compiladores antigos.
  • Geralmente aumenta os tempos de compilação mais do que menos abordagens pesadas de modelo.
  • Algum código de impulso pode não fazer o que você acha que faz. Leia a documentação!
  • O abuso de modelos pode levar a mensagens de erro ilegíveis.
  • O abuso de modelos pode levar a um código difícil para passar no depurador.
  • É a borda sangrando C ++. A próxima versão do Boost pode não compilar mais seu compilador atual (mais antigo).

Tudo isso não significa que você não deva dar uma olhada no código do impulso e obter algumas idéias, mesmo que você não use o Boost como é.

Boost é uma coleção de bibliotecas C ++. 10 dos quais estão sendo incluídos no Tr1 de C ++ 0x.

Você pode Comece com o Boost aqui.

Impulso é uma coleção de bibliotecas C ++ revisadas por pares de alta qualidade que enfatizam a portabilidade e a correção. Ele atua como o Defacto provando motivos para novas adições ao idioma e à biblioteca padrão. Verifique o website deles para mais detalhes.

Vantagens do Boost: está amplamente disponível, portará para qualquer compilador C ++ moderno ou sobre qualquer plataforma.
As funções são a plataforma independente, você não precisa aprender um novo design de thread para cada nova estrutura.
Ele encapsula muitas funções específicas do Platfom, como os sistemas de arquivos de maneira padrão.

É com o que o C ++ deveria ter enviado! Muita popularidade de Java era que é enviada com uma biblioteca padrão para pretender tudo o que você queria. Infelizmente, o C ++ herdou apenas as funções padrão C/UNIX limitadas.

shared_ptr e weak_ptr, especialmente em código multithread, vale a pena instalar o Boost. BOOST_STATIC_ASSERT Também é muito legal para fazer a verificação da lógica de tempo de compilação.

O fato de muitas das aulas e utilitários do Boost estarem em cabeçalhos, o que significa que você pode obter muitas funcionalidades sem precisar compilar nada, também é uma vantagem. A portabilidade geralmente não é um problema, a menos que você use um compilador extremamente antigo. Uma vez tentei fazer com que a MPL trabalhasse com o VC6 e ele imprimi 40.000 avisos/erros internos antes de explodir completamente. Mas, em geral, a maior parte da biblioteca deve funcionar, independentemente da sua plataforma ou fornecedor do compilador.

Leve em consideração o fato de que algumas coisas do Boost já estão no TR1 e provavelmente estarão na próxima revisão da biblioteca padrão C ++. Isso é um grande endosso.

O Boost é uma biblioteca muito extensa de construções genéricas (geralmente) que podem ajudar em quase qualquer aplicativo. Isso pode ser demonstrado pelo fato de que muitos componentes de impulso foram incluídos nas especificações C ++ 0x.

Também é portátil em pelo menos as principais plataformas e deve ser portátil para quase qualquer coisa com um compilador C ++, principalmente compatível com padrões.

O único aviso é que pode haver muitas dependências misturadas entre as bibliotecas de impulso, dificultando a escolha de apenas um componente específico para distribuir (exceto a biblioteca inteira do Boost).

Tudo isso acima, além de incentivar muitas técnicas modernas de C ++ modernas. Tende a melhorar a qualidade do seu código.

Observe também a maior parte do impulso são os modelos, por isso não requer construção
(Basta incluir os arquivos de cabeçalho corretos).

As poucas partes que exigem construção são opcionais:
Cada um pode ser construído de forma independente, impedindo assim o inchaço desnecessário para código desnecessário.

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