Par où commencer à apprendre à utiliser les bibliothèques Boost?

16

Boost est récemment devenu disponible sur le projet sur lequel je travaille, et je n'ai pas beaucoup d'expérience avec lui. La bibliothèque a tellement de parties et de fonctionnalités qu'il est difficile de savoir par où commencer pour l'apprendre - d'autant plus que je vais essayer de l'apprendre tout en créant du code de production (donc ça ne peut pas trop me ralentir).

J'apprécierais grandement que quelqu'un puisse énumérer environ 3 à 5 fonctionnalités qui sont très utiles en général, une programmation quotidienne et indiquer pourquoi elles sont utiles. Ensuite, je peux commencer à les apprendre et à les utiliser - cela me donnera au moins un pied dans la bibliothèque et un endroit convivial pour commencer à l'apprendre / à l'appliquer :)

Merci d'avance!

John Humphreys - w00te
la source
Je ne comprends pas l'expression «prendre pied dans la bibliothèque» dans ce contexte. Quel est le problème avec les livres? Il y en a quelques-uns sur le sujet des vendeurs habituels, les avoir sur la bibliothèque de vos équipes devrait être un must.
aquaherd
Je lis tout le temps pour la programmation - je n'ai pas le temps de lire un livre ou un guide de référence sur boost back to front pour savoir tout ce qu'il a et s'il est utile ou non cette minute. Je voudrais commencer à l'utiliser ici et là et le ramasser lentement tout en travaillant, et je voulais quelques exemples de base de composants boost vraiment utiles. Par exemple, Effective C ++ par Scott Meyers parle de shared_ptr non stop (et très peu d'autre) parce que c'est tellement bon. Quoi d'autre est exceptionnellement utile dans le boost?
John Humphreys - w00te
Personnellement, j'ai beaucoup aimé les macros BOOST_FOREACH, les modèles d'observateur / abonné, les expressions régulières, les analyseurs de date / heure (facettes), mais je les ai rencontrés par hasard en modifiant le boost existant en utilisant du code ou comme DeadMG l'a souligné. Je n'ai fait qu'effleurer la pointe de l'iceberg qui est boost, mais c'était comme une continuation naturelle de la STL.
aquaherd

Réponses:

8

Si vous utilisez un compilateur pré TR1, des pointeurs intelligents

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

boost::scoped_array
boost::shared_array

Si votre compilateur possède déjà des pointeurs intelligents, utilisez-les.
La raison en est évidente C ++ sans pointeurs intelligents n'est fondamentalement pas C ++

Les bibliothèques boost ptr_contaier.

Tous les conteneurs STL ont été réimplémentés spécifiquement pour contenir des pointeurs. Non seulement les conteneurs s'approprient les pointeurs de sorte que lorsque le conteneur est détruit, il détruit automatiquement tous les pointeurs. MAIS il fournit également des accès aux éléments en tant que références d'objet normales (pas des pointeurs), ce qui facilite l'utilisation des objets dans des algorithmes standard sans foncteurs wrapper.

Les bibliothèques boost lambda. (voir commentaire ci-dessous)

Les foncteurs et classeurs STL conviennent pour les choses simples. Mais boost :: lambda a franchi la prochaine étape et rend les choses beaucoup plus simples lors de l'utilisation des algorithmes standard.

boost :: any et boost :: variante

Lorsque vous devez tenir des objets sans vouloir connaître leur type exact.

Conteneurs multi-index

Conteneurs qui permettent plusieurs façons d'accéder aux éléments.
Fini le temps où vous avez un vecteur d'objets et une carte distincte pour une recherche rapide. Cela réduit le passe-partout que vous devez écrire pour maintenir les deux conteneurs lors de l'insertion / suppression d'éléments dans les conteneurs.

boost :: lexical_cast

Probablement le moins utile dans la vie réelle mais avec beaucoup de plaisir à jouer avec boost :: lexical_cast. Il convertit n'importe quel objet en / à partir d'une chaîne (tant que ce type a les opérateurs << et >> appropriés définis). Très utile pour vider les messages d'erreur lors du débogage.

Martin York
la source
1
Boost.Phoenix a officiellement remplacé Boost.Lambda, qui est maintenant considéré comme obsolète. Veuillez recommander l'ancien plutôt que le dernier pour le nouveau code. : -]
ildjarn
16

Boost n'est ni un framework, ni une bibliothèque. Il s'agit d'une collection de bibliothèques dont la qualité est contrôlée par des pairs. Vous n'apprenez pas Boost. Les bibliothèques sont individuelles - quand vous avez besoin de quelque chose, vous vérifiez si c'est dans Boost, si c'est le cas, alors vous apprenez cette bibliothèque. C'est ça. Vous ne pouvez pas avoir une compréhension de boost :: optionnel pour obtenir une compréhension de boost :: variant.

DeadMG
la source
4
On pourrait dire que boost est un label de qualité et un ensemble de distribution.
Klaim
1

Boost est une collection de bibliothèques. La prochaine fois que vous ferez un code kata, choisissez une bibliothèque dans Boost qui pourrait vous aider et utilisez-la. La documentation est très bonne et vous ne devriez pas avoir de problèmes pour choisir des utilisations simples. Les plus complexes viendront lorsque vous essayez de faire des choses plus intelligentes.

Exemple: un singleton thread-safe avec boost :: thread call_once.

Exemple: lire un fichier de configuration de key: value à l'aide de tokenizer.

Sardathrion - Rétablir Monica
la source