Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Boost.Flyweight Documentation - Factories reference

Boost , , Boost.Flyweight Documentation - Reference

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Boost.Flyweight Factories reference



Contents

Factories and factory specifiers

Учитывая типКлючиПризнаваемый типВходнеявно конвертируемый вconst Key&,заводВходэлементы(неявно связанные сКлючявляетсяКонструктивный по умолчаниюобъект, способный хранить и извлекать неизменяемые элементы типаВступление. Фабрика управляется связанным отношением эквивалентности, определенным наКлюче, так что нет двухВходобъектов, конвертируемых в эквивалентКлючможет храниться одновременно на заводе. Различные типы фабрик могут использовать различные отношения эквивалентности.

В следующей таблицеФабрикаявляется фабрикой элементов типаВход,fобозначает объект типаФабрика,xявляется объектом типаВходиhявляется значениемПроизводитель: Handle_type.

Factory requirements.
expression return type assertion/note
pre/post-condition
Фабрика::handle_type рукоятка для элементов типаТ
, хранящихся на заводе
handle_typeisНазначаемыеи его копия и
операции назначения никогда не бросают исключение.
f.insert(x); handle_type Вставляется копияx, если вfнет эквивалентной записи;
возвращает ручку в вставленный или эквивалентный элемент.
f.erase(h); пустота Стирает элемент, связанный сh
. Эта операция не бросает.
f.entry(h); const Entry& Возвращает ссылку на элемент, связанный сh.
Эта операция не бросает.

В дополнение к основной гарантии безопасности потока, которая подразумевается для большинства классов, включая большинство компонентов стандартной библиотеки C++, требуется, чтобы функция участниказаписьмогла быть вызвана одновременно из разных потоков, даже при наличии одновременных доступов квставкеистиранию(до тех пор, пока запись, возвращеннаязапись, не является той, которая стирается).

ТипSназываетсязаводским спецификатором, если:

    1. - это_factory::type-повышение::mpl::true_,
      1. - это_factory::type
      2. Sзавод.
    2. S,S', [b],MPL Lambda Expression,Ввод,Ключ,Ключ,Ключ,Ввод,Ввод, [Ключ, [Ключ], [Ключ].
    Удовлетворено одно из следующих условий:
    1. is_factory<S>::typeboost::mpl::true_:
    2. Sимеет формуfactory<S'>.
  1. SилиS', если (b) применяется, являетсяMPL Lambda Expressionтаким, что вызов его с типамиEntry,Keyразрешает фабричный типEntryэлементов (неявно связанных сKey).
[ORIG_END] -->

Header "boost/flyweight/factory_tag.hpp" synopsis

namespace boost{
namespace flyweights{
struct factory_marker;
template<typename T>
struct is_factory;
template<typename T>
struct factory;
} // namespace boost::flyweights
} // namespace boost

Class template is_factory

Если пользователь не специализируется,is_factory::typeisboost::mpl::true_, еслиTполучен изfactory_marker, и этоboost::mpl::false_в противном случае.

Class template factory

factory— это синтаксическая конструкция, предназначенная для указания на то, чтоTявляется заводским спецификатором, не прибегая к механизмам, предоставляемым шаблоном классаis_factory.

Header "boost/flyweight/hashed_factory_fwd.hpp" synopsis

namespace 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.hppforward объявляет шаблоны классовhashed_factory_classиhashed_factory.

Header "boost/flyweight/hashed_factory.hpp" synopsis

Class template hashed_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::max()]Предявляется.Конструкция по умолчаниюБинарный предикат, индуцирующий отношение эквивалентности на элементахКлюча. Требуется, чтобы объектHashвозвращал такое же значение для объектов, эквивалентныхPred. Отношение эквивалентности наКлюче, связанное с фабрикой, вызваноПред.иявляются.boost::hashиstd::equal_toсоответственно.Распределительдолжен быть распределителемВводобъектов, удовлетворяющих соответствующим требованиям C++ по[lib.allocator.requirements]. Аргумент по умолчаниюstd::allocator< Entry>. Внутренний хешированный контейнер, на котором основанhashed_factory_class, построен с парафированными по умолчанию объектами типаHash,PredиAllocator.

Class template 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.

Header "boost/flyweight/set_factory_fwd.hpp" synopsis

namespace 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.hppforward объявляет шаблоны классовset_factory_classиset_factory.

Header "boost/flyweight/set_factory.hpp" synopsis

Class template set_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.

Class template 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.

Header "boost/flyweight/assoc_container_factory_fwd.hpp" synopsis

namespace 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.

Header "boost/flyweight/assoc_container_factory.hpp" synopsis

Class template assoc_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);
};

Контейнердолжен быть (упорядоченным или неупорядоченным) ассоциативным контейнером, таким, чтобы

  1. Контейнер::key_typeКонтейнер::key_typeКонтейнер::value_type[скрыто].
  2. Соответствует спецификации ключа (a) - эквивалент ключа.
  3. Контейнерстабильно, т.е. , т.е. , т.е. , т.е. , и т.е. , и т.д., и т.д.
Отношение эквивалентности, связанное с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являетсястабильным, т.е. его итераторы не признаются недействительными при операциях вставки или стирания.
  • The equivalence relation associated to 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
    >
    

    производныеэлементы, неявно связанные соснованием.

    Class template 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 ::


    реклама


    ©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
    Top.Mail.Ru

    Время компиляции файла: 2024-08-30 11:47:00
    2025-07-05 09:35:34/0.0086159706115723/0