Qu'est-ce que l'utilisation typique de boost n'importe quelle bibliothèque?
Quels sont les avantages de l'utilisation de boost.n'importe quelle bibliothèque ? Pourriez-vous me donner quelques exemples concrets ? Pourquoi la même fonctionnalité ne pouvait pas être atteint par avoir un type générique dans la racine de l'objet de la hiérarchie et de la création de conteneurs avec ce type de base ?
- Lorsque j'ai commencé à apprendre à propos du coup de pouce de tout, j'ai trouvé cet article par Herb Sutter et Jim Hyslop Dr Dobbs. Je l'ai trouvé utile.
Vous devez vous connecter pour publier un commentaire.
Je considère que Boost.Variante doit toujours être préféré car il est non-intrusif et encore des appels pour de très une programmation structurée.
Mais je suppose que l'idée principale derrière coup de pouce.tout est à fournir l'équivalent de java et c# types d'objet. C'est une façon de dire "oui nous le pouvons ! 🙂
boost::any sera heureux de stocker des entiers et des flottants, des types qui n'ont manifestement aucune des classes de base. Un exemple réel où vous pouvez utiliser une machine virtuelle pour un haut niveau de langage interprété. Votre "fonction" objets aurez besoin d'un tableau d'arguments. Cela peut facilement être mis en œuvre avec un
std::list<boost::any>
derrière les coulisses.Nous l'avons utilisé dans une carte de propriété, (
std::map<std::string, boost::any>
), pour stocker beaucoup de choses de manière dynamique dans un simple plat dataspace.La plupart du temps nous soit stockée smart-ptr-à-scripts-objets ou des chaînes, mais certaines entrées où d'autres types (flotteurs, vec3f, des matrices, et d'autres non-standard des objets).
Il fonctionne assez bien pour ajouter plus de fonctionnalités dynamiques à c++, ou partout où vous voulez un certain type-erasure juste ajouter n'importe quel type de données d'un objet.
Qui appelle une hiérarchie d'objets -- une construction vous sont d'injecter artificiellement dans la conception pour la résolution d'un problème conjoncturel. En outre, une telle construction est facile de se tromper et d'une mauvaise mise en œuvre peut faire des ravages.
Boost.Any
est une communauté examiné sûr et bien testé alternative.TinyJSON utilise
boost.Any
.Je renvoie le introduction de la documentation.
boost::variant<T...>
est à mon avis le meilleur choix.Nous utiliser boost.tout comme le transporteur de type pour un type-safe tagged variadic conteneur. Voici ce que cela signifie:
Nous avons un "radeau" de l'objet, qui se déplace à travers une série de filtres. Lorsqu'un filtre veut ajouter des données sur le radeau, il peut faire quelque chose comme ceci:
Où
ETag1
etETag2
sont membres d'un enum, et nous utilisons les traits de modèle de carte de balises de types.Le radeau de la classe est à l'aide d'un
list
depair<ETagType, boost::any>
comme un support de sauvegarde. Coup de pouce.tout nous a épargné la douleur de la gestion de la mémoire tampon en raw pour les différents types.