Question

Depuis que j'ai commencé à utiliser ce site, j'entends beaucoup parler de la bibliothèque Boost. Je me demande quels sont les principaux avantages de la bibliothèque Boost (et par conséquent, pourquoi devrais-je l’utiliser) et quel est le degré de portabilité de la bibliothèque Boost?

Était-ce utile?

La solution

Boost est organisé par plusieurs membres du comité des normes.
C’est donc un terrain fertile pour les bibliothèques qui feront partie de la prochaine norme.

  1. C'est une extension de la STL (il remplit les bits laissés)
  2. C'est bien documenté.
  3. Il est bien revu par les pairs.
  4. L'activité étant intense, les bugs sont détectés et corrigés rapidement.
  5. Cette plate-forme est neutre et fonctionne partout.
  6. Son utilisation est gratuite.

Comme tr1 arrive bientôt, il est bon de savoir que le boost a déjà une bonne partie du terrain. Un grand nombre des bibliothèques de tr1 sont fondamentalement adaptées directement à partir des originaux boost et ont donc été essayées et testées. La différence est qu’ils ont été déplacés dans l’espace de noms std :: tr1 (plutôt que boost).

Tout ce que vous avez à faire est d’ajouter ce qui suit à votre compilateur par défaut inclure le chemin de recherche :

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

Ensuite, lorsque vous incluez les en-têtes standard, boost importera automatiquement tous les éléments requis dans l'espace de noms std :: tr1

.

Par exemple:

Pour utiliser std :: tr1 :: share_ptr, vous devez simplement inclure < memory > ;. Cela vous donnera tous les pointeurs intelligents avec un seul fichier.

Autres conseils

Vous pouvez simplement lire la page Boost Background Information pour obtenir un aperçu rapide des raisons pour lesquelles vous devriez utiliser Boost et ce que vous pouvez utiliser pour. Cela vaut la peine de prendre quelques minutes.

99% portable.

Je dirais qu’il existe de nombreuses bibliothèques qui sont vraiment utiles lorsque vous découvrez un besoin résolu par boost. Soit vous le code vous-même ou vous utilisez une bibliothèque très solide. Avoir une source cachée pour des produits comme Multi-Index, Lambda, Options de programme, RegEx, SmartPtr et Tuple est incroyable ...

La meilleure chose à faire est de passer un peu de temps à parcourir la documentation des différentes bibliothèques et à évaluer si elle pourrait vous être utile.

Digne !!

Vous obtenez beaucoup de choses qui arrivent en C ++ 0x. Cependant, mis à part cette généralité, une des bibliothèque de regex , une bibliothèque de diffusion pour la diffusion d'une chaîne à une autre (distribution lexicale):

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

Une bibliothèque de date / heure , parmi d'autres ...

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

Il existe également une interface Python . (Boost Python), un lexer / analyseur DSL (Boost Spirit):

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

et ça ne fait que gratter la surface ...

Boost, c'est bien, mais pour jouer à Devil's Advocate, voici quelques raisons pour lesquelles vous ne voudrez peut-être pas utiliser Boost:

  • Parfois, la compilation / le fonctionnement sur les anciens compilateurs échoue.
  • Cela augmente souvent le temps de compilation plus que les approches moins lourdes en modèles.
  • Certains codes Boost peuvent ne pas faire ce que vous pensez qu'il fait. Lisez la documentation!
  • L'abus de modèle peut entraîner des messages d'erreur illisibles.
  • L'abus de modèles peut rendre le code difficile à parcourir dans le débogueur.
  • Il est à la pointe de la technologie C ++. La prochaine version de Boost risque de ne plus être compilée sur votre compilateur actuel (plus ancien).

Tout cela ne signifie pas que vous ne devriez pas jeter un coup d'œil au code Boost et obtenir quelques idées vous-même, même si vous n'utilisez pas Boost tel quel.

Boost est une collection de bibliothèques C ++. 10 dont sont inclus dans tr1 de C ++ 0x.

Vous pouvez démarrer avec boost ici .

Boost est une collection de bibliothèques C ++ révisées par des pairs de haute qualité, qui mettent l'accent sur la portabilité et l'exactitude. C'est la base factuelle pour de nouveaux ajouts au langage et à la bibliothèque standard. Visitez leur site Web pour plus de détails.

Les avantages de Boost: Il est largement disponible et portera sur n'importe quel compilateur C ++ moderne ou sur n'importe quelle plateforme.
Les fonctions sont indépendantes de la plate-forme, vous n'avez pas à apprendre un nouveau design de fil pour chaque nouveau framework.
Il encapsule de nombreuses fonctions spécifiques à la plate-forme, comme les systèmes de fichiers, de manière standard.

C’est ce que C ++ aurait dû embarquer! Une grande partie de la popularité de Java réside dans le fait qu’il est livré avec une bibliothèque standard permettant de faire pratiquement tout ce que vous vouliez. C ++ n’a malheureusement hérité que des fonctions standard limitées de C / Unix.

shared_ptr et weak_ptr, en particulier dans le code multithread, méritent à eux seuls l’installation de boost. BOOST_STATIC_ASSERT C’est également très pratique pour vérifier la logique au moment de la compilation.

Le fait que de nombreuses classes et utilitaires de boost se trouvent dans les en-têtes, ce qui signifie que vous pouvez obtenir beaucoup de fonctionnalités sans avoir à compiler quoi que ce soit, est également un avantage. La portabilité ne pose généralement pas de problème, sauf si vous utilisez un compilateur extrêmement ancien. Une fois, j'ai essayé de faire fonctionner MPL avec VC6 et celui-ci imprimait 40 000 avertissements / erreurs internes avant d'exploser complètement. Mais en général, la plupart des bibliothèques devraient fonctionner indépendamment du fournisseur de votre plate-forme ou de votre compilateur.

Tenez compte du fait que bon nombre d'éléments de Boost sont déjà dans TR1 et le seront probablement dans la prochaine révision de la bibliothèque standard C ++. C'est un très gros soutien.

Boost est une bibliothèque très étendue de constructions (généralement) génériques qui peuvent aider dans presque toutes les applications. Cela peut être démontré par le fait que beaucoup de composants boost ont été inclus dans les spécifications C ++ 0x.

Il est également portable sur au moins les principales plates-formes et devrait l'être à peu près avec n'importe quel compilateur C ++ conforme aux normes.

Le seul avertissement est qu'il peut exister de nombreuses dépendances mélangées entre les bibliothèques boost, ce qui rend plus difficile la sélection d'un composant spécifique à distribuer (autre que la bibliothèque boost entière).

Tout ce qui précède, plus les techniques C ++ modernes et les meilleures pratiques qui y sont utilisées, sont également encouragées. Cela tend à améliorer la qualité de votre code.

Notez également que la plupart des boosters sont des modèles, donc aucune construction n'est requise
(n'incluez que les fichiers d'en-tête appropriés).

Les quelques pièces à construire sont facultatives:
Celles-ci peuvent chacune être construites indépendamment, évitant ainsi un gonflement inutile du code inutile.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top