2017-01-26 2 views
1

Je ne peux pas comprendre comment utiliser boost::flyweight comme un modèle GOF. Existe-t-il un exemple quelque part? Par exemple, je m'attends à l'utiliser de la manière suivante. Il doit y avoir un conteneur de poids mouche, qui constituent les objets "gras". Ce conteneur peut donner un "support/descripteur" léger pour certains objets. Et je peux stocker le descripteur dans un conteneur.Comment utiliser boost :: flyweight comme un modèle GOF?

Je n'arrive pas à comprendre comment recevoir le "holder/descriptor" de l'objet du boost::flyweight.

Répondre

1

Une implémentation de modèle n'a pas besoin de mapper 1: 1 à la description de modèle d'origine. C'est une bonne chose , puisque l'on peut utiliser les fonctionnalités de langage non disponibles dans le jeu de fonctions que GoF utilisait, pour rendre cette implémentation plus performante, moins verbeuse, plus facile à gérer, etc., etc.

The boost::flyweightis the "lightweight holder/descriptor":

Boost.Flyweight le rend facile à utiliser ce langage de programmation commun en fournissant le modèle de classe flyweight<T>, qui agit en remplacement de drop-in pour const T.

+0

Je ne comprends toujours pas. Par exemple, dans le cas d'un éditeur de texte, j'ai besoin d'un conteneur qui contiendrait la liste des "descripteurs" de la lettre d'entrée que l'utilisateur a saisie. Alors, comment l'implémenter avec boost? Ce doit être une liste de flyweigts? (std :: list > ligne;) – AeroSun

+0

@AeroSun Si vous regardez les exemples dans la documentation, comme [celui-ci, à propos du traitement de texte formaté] (http://www.boost.org/doc /libs/1_63_0/libs/flyweight/example/html.cpp), vous verrez qu'ils font exactement cela: 'typedef flyweight caractère; std :: vector scanned_html; ' – milleniumbug

+0

Merci beaucoup! Maintenant, je comprends. C'est trop différent des modèles GoF. L'implémentation de boost semble très simple à utiliser, mais je ne sais pas si c'est bien que je n'ai pas accès au repository des objets internes. – AeroSun