2017-01-26 9 views
1

Я не могу понять, как использовать boost::flyweight как шаблон GOF. Есть ли где-нибудь пример?Как использовать boost :: flyweight как шаблон GOF?

Например, я ожидаю его использования следующим образом. Должен быть какой-нибудь мухомоторный контейнер, состоящий из «жирных» объектов. Этот контейнер может дать некоторый легкий «держатель/дескриптор» для некоторого объекта. И я могу хранить дескриптор в каком-то контейнере.

Я не могу понять, как получить «держатель/дескриптор» объекта от boost::flyweight.

ответ

1

Реализация шаблона не обязательно отображать 1: 1 в исходное описание рисунка. Это хорошая вещь, так как можно использовать языковые функции, недоступные в любом наборе функций GoF, чтобы сделать эту реализацию более совершенной, менее многословной, более удобной и т. Д. И т. Д.

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

Boost.Flyweight позволяет легко использовать эту общую программную идиому, предоставляя шаблон класса flyweight<T>, который действует как дроп-ин для замены const T.

+0

Я до сих пор не получаю. Например, в случае текстового редактора мне нужен контейнер, который будет содержать список «дескрипторов» буквы eath, которую вводит пользователь. Итак, как реализовать его с повышением? Это должен быть список мухоловки? (std :: list > line;) – AeroSun

+0

@AeroSun Если вы посмотрите на примеры в документации, например [об этой форматированной обработке текста] (http://www.boost.org/doc /libs/1_63_0/libs/flyweight/example/html.cpp), вы увидите, что они делают именно это: символ typedef flyweight ; std :: vector scanned_html; ' – milleniumbug

+0

Thx много! Теперь я понимаю. Он слишком отличается от шаблонов GoF. Реализация форсирования выглядит очень просто в использовании, но я не уверен, что хорошо, что у меня нет доступа к внутреннему репозиторию объектов. – AeroSun