![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Boost.Flyweight Documentation - Factories referenceBoost , , Boost.Flyweight Documentation - Reference
|
expression | return type | assertion/note pre/post-condition |
---|---|---|
Фабрика::handle_type |
рукоятка для элементов типаТ , хранящихся на заводе |
handle_type isНазначаемые и его копия иоперации назначения никогда не бросают исключение. |
f.insert(x); |
handle_type |
Вставляется копияx , если вf нет эквивалентной записи;возвращает ручку в вставленный или эквивалентный элемент. |
f.erase(h); |
пустота |
Стирает элемент, связанный сh . Эта операция не бросает. |
f.entry(h); |
const Entry& |
Возвращает ссылку на элемент, связанный сh .Эта операция не бросает. |
В дополнение к основной гарантии безопасности потока, которая подразумевается для большинства классов, включая большинство компонентов стандартной библиотеки C++, требуется, чтобы функция участниказапись
могла быть вызвана одновременно из разных потоков, даже при наличии одновременных доступов квставке
истиранию
(до тех пор, пока запись, возвращеннаязапись
, не является той, которая стирается).
ТипS
называетсязаводским спецификатором, если:
- это_factory::type
-повышение::mpl::true_
,S
,S'
, [b],MPL Lambda Expression
,Ввод
,Ключ
,Ключ
,Ключ
,Ввод
,Ввод
, [Ключ
, [Ключ
], [Ключ
].is_factory<S>::type
boost::mpl::true_
:S
имеет формуfactory<S'>
.S
илиS'
, если (b) применяется, являетсяMPL Lambda
Expression
таким, что вызов его с типамиEntry
,Key
разрешает фабричный типEntry
элементов (неявно связанных сKey
)."boost/flyweight/factory_tag.hpp"
synopsisnamespace boost{ namespace flyweights{ struct factory_marker; template<typename T> struct is_factory; template<typename T> struct factory; } // namespace boost::flyweights } // namespace boost
is_factory
Если пользователь не специализируется,is_factory
isboost::mpl::true_
, еслиT
получен изfactory_marker
, и этоboost::mpl::false_
в противном случае.
factory
factory
— это синтаксическая конструкция, предназначенная для указания на то, чтоT
является заводским спецификатором, не прибегая к механизмам, предоставляемым шаблоном классаis_factory
.
"boost/flyweight/hashed_factory_fwd.hpp"
synopsisnamespace boost{ namespace flyweights{ template< typename Entry,typename Key, typename Hash=implementation defined, typename Pred=implementation defined, typename Allocator=implementation defined > class hashed_factory_class; template< typename Hash=implementation defined, typename Pred=implementation defined, typename Allocator=implementation defined > struct hashed_factory; } // namespace boost::flyweights } // namespace boost
hashed_factory_fwd.hpp
forward объявляет шаблоны классовhashed_factory_class
иhashed_factory
.
"boost/flyweight/hashed_factory.hpp"
synopsishashed_factory_class
hashed_factory_class
— этоФабрика
, реализованная с хешированным контейнером.
template< typename Entry,typename Key, typename Hash,typename Pred,typename Allocator > class hashed_factory_class { public: typedef implementation defined handle_type; handle_type insert(const Entry& x); void erase(handle_type h); const Entry& entry(handle_type h); };
Хаш
— это.Конструкция по умолчанию
Унарная функция
, принимая один аргумент типаКлюч
и возвращая значение типаstd::size_t
в диапазоне[0, std::numeric_limits
Пред
является.Конструкция по умолчанию
Бинарный предикат
, индуцирующий отношение эквивалентности на элементахКлюча
. Требуется, чтобы объектHash
возвращал такое же значение для объектов, эквивалентныхPred
. Отношение эквивалентности наКлюче
, связанное с фабрикой, вызваноПред
.и
являются.
boost::hash
иstd::equal_to
соответственно.Распределитель
должен быть распределителемВвод
объектов, удовлетворяющих соответствующим требованиям C++ по[lib.allocator.requirements]. Аргумент по умолчаниюstd::allocator< Entry>
. Внутренний хешированный контейнер, на котором основанhashed_factory_class
, построен с парафированными по умолчанию объектами типаHash
,Pred
иAllocator
.
hashed_factory
Фабричный спецификатор
дляhashed_factory_class
.
template<typename Hash,typename Pred,typename Allocator> struct hashed_factory;
hashed_factory
MPL Метафункциональный класс
такой, что тип
boost::mpl::apply< hashed_factory<Hash,Pred,Allocator>, Entry,Key >::type
Это то же самое, что
boost::mpl::apply< hashed_factory_class<boost::mpl::_1,boost::mpl::_2,Hash,Pred,Allocator>, Entry,Key >::type
Это означает, чтоHash
,Pred
иAllocator
могут бытьMPL Placeholder Expressions
, разрешающими фактические типы, используемыеhashed_factory_class
.
"boost/flyweight/set_factory_fwd.hpp"
synopsisnamespace boost{ namespace flyweights{ template< typename Entry,typename Key, typename Compare=implementation defined, typename Allocator=implementation defined > class set_factory_class; template< typename Compare=implementation defined, typename Allocator=implementation defined > struct set_factory; } // namespace boost::flyweights } // namespace boost
set_factory_fwd.hpp
forward объявляет шаблоны классовset_factory_class
иset_factory
.
"boost/flyweight/set_factory.hpp"
synopsisset_factory_class
set_factory_class
являетсяЗавод
реализован поверх упорядоченного ассоциативного контейнера.
template< typename Entry,typename Key, typename Compare,typename Allocator > class set_factory_class { public: typedef implementation defined handle_type; handle_type insert(const Entry& x); void erase(handle_type h); const Entry& entry(handle_type h); };
Сравнение
представляет собойКонструктивное по умолчанию
Строгое слабое упорядочивание
наКлюче
Дваключа
sx
иу
считаются эквивалентными, если!c(x,y)&&x]
дляc
типаСравнить
. Аргументом по умолчаниюСравнить
являетсяstd::less
Распределитель
должен быть Распределитель. Ввод
объектов, удовлетворяющих соответствующим требованиям C++ по[lib.allocator.requirements]. Аргумент по умолчаниюstd::allocator< Entry>
. Внутренний контейнер, на котором основанset_factory_class
, построен с начальными объектами типа по умолчаниюCompare
иAllocator
.
set_factory
Фабричный спецификатор
дляset_factory_class
.
template<typename Compare,typename Allocator> struct set_factory;
set_factory
представляет собойMPL Metafunction Class
, такой, что тип
boost::mpl::apply< set_factory<Compare,Allocator>, Entry,Key >::type
Это то же самое, что
boost::mpl::apply< set_factory_class<boost::mpl::_1,boost::mpl::_2,Compare,Allocator>, Entry,Key >::type
Это означает, чтоСравнить
иРаспределитель
может быть.MPL Placeholder Expressions
, разрешающие фактические типы, используемыеset_factory_class
.
"boost/flyweight/assoc_container_factory_fwd.hpp"
synopsisnamespace boost{ namespace flyweights{ template<typename Container> class assoc_container_factory_class; template<typename ContainerSpecifier> struct assoc_container_factory; } // namespace boost::flyweights } // namespace boost
assoc_container_factory_fwd.hpp
вперед объявляет шаблоны классовassoc_container_factory_class
иassoc_container_factory
.
"boost/flyweight/assoc_container_factory.hpp"
synopsisassoc_container_factory_class
assoc_container_factory_class
обертывает подходящий ассоциативный контейнер для обеспечения интерфейсаFactory
.
template<typename Container> class assoc_container_factory_class { public: typedef typename Container::iterator handle_type; handle_type insert(const typename Container::value_type& x); void erase(handle_type h); const typename Container::value_type& entry(handle_type h); };
Контейнер
должен быть (упорядоченным или неупорядоченным) ассоциативным контейнером, таким, чтобы
Контейнер::key_type
Контейнер::key_type
Контейнер::value_type
[скрыто].Контейнер
стабильно, т.е. , т.е. , т.е. , т.е. , и т.е. , и т.д., и т.д.assoc_container_factory_class
, вызываетсяContainer
. Если эквивалентность элементовКонтейнера::value_type
определяется исключительно на основе типаvalue_type'
, к которомуvalue_type
является неявно конвертируемым, тоassoc_container_factory_class
является фабрикой записей типаvalue_type
, неявно связанных сvalue_type'
. Например, инстанциацияContainer::key_type
то же самое, чтоContainer::value_type
(это тип входа, связанный с заводом).
Container
являетсястабильным, т.е. его итераторы не признаются недействительными при операциях вставки или стирания.assoc_container_factory_class
is the one induced by Container
. If equivalence of elements
of Container::value_type
is determined solely on the basis of a
type value_type'
to which value_type
is
implicitly convertible, then assoc_container_factory_class
is
a factory of entries of type value_type
implicitly associated to
value_type'
. For example, the instantiation
[ORIG_END] -->
assoc_container_factory_class< std::set<derived,std::less<base> > // derived inherits from base >
производные
элементы, неявно связанные соснованием
.
assoc_container_factory
Спецификатор завода
дляassoc_container_factory_class
.
template<typename ContainerSpecifier> struct assoc_container_factory;
КонтейнерСпецификатор
должен бытьMPL Lambda Expression
, разрешающим, при вызове сВход
,Ключ
, типКонтейнер
такой, чтоassoc_container_factory_class
является фабрикойВвод
элементов, неявно связанных сКлючом
.
Пересмотрено 13 августа 2008 года
© Copyright 2006-2008 Joaquín M López Muñoz. Распространяется под лицензией Boost Software License, версия 1.0. (См. сопроводительный файлLICENSE_1_0.txtили копию на) http://www.boost.org/LICENSE_1_0.txt
Статья Boost.Flyweight Documentation - Factories reference раздела Boost.Flyweight Documentation - Reference может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Boost.Flyweight Documentation - Reference ::
реклама |