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

Interface

Boost , Chapter 1. Boost.Icl , Chapter 1. Boost.Icl

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

PrevUpHomeNext

Раздел Интерфейс описывает типы и функции Icl. Синоптические таблицы позволяют пересмотреть общую структуру дизайна библиотек и сосредоточиться на структурных равных возможностях и различиях с соответствующими контейнерами стандартной библиотеки шаблонов.

В icl у нас есть две группы интервальных типов. , , которые всегда имеют один и тот же интервал и >, interval>, , которые всегда имеют один и тот же тип границ и intertimebounded>.

Table 1.6. Interval class templates

группа

форма

шаблон

параметры

статически ограничен

асимметричный

right_open_interval

<класс ДоменТ, темпа<класс>классСравнить>

left_open_interval

<...same for all interval class templates...>

symmetric

closed_interval

open_interval

discrete_interval

continuous_interval


Не каждый шаблон класса работает со всеми типами доменов. Используйте шаблоны интервального класса согласно следующей таблице.

Table 1.7. Usability of interval class templates for discrete or continuous domain types

группа

форма

шаблон

диск

непрерывно

[ORIG_END] -->

статически ограничен

асимметричный

right_open_interval

да

да

left_open_interval

да

да

symmetric

closed_interval

да

open_interval

да

discrete_interval

да

continuous_interval

да


С прагматической точки зрения, наиболее важным шаблоном интервального класса статически ограниченной является right_open_interval. Для отдельных типов доменов также могут быть удобными замкнутые интервалы. Асимметричные интервалы могут использоваться с непрерывными типами доменов, но continuous_interval - единственный шаблон класса, который позволяет представлять одиночный интервал, содержащий только один элемент.

Используйте непрерывный_интервал, если вы работаете с интервальными контейнерами созерцательных типов доменов и хотите иметь возможность обрабатывать одиночные значения:

typedef interval_set<std::string, std::less, continuous_interval<std::string> > IdentifiersT;
IdentifiersT identifiers, excluded;
identifiers += continuous_interval<std::string>::right_open("a", "c");
// special identifiers shall be excluded
identifiers -= std::string("boost");
cout << "identifiers: " << identifiers << endl;
excluded = IdentifiersT(icl::hull(identifiers)) - identifiers;
cout << "excluded   : " << excluded << endl;
//------ Program output: --------
identifiers: {[a,boost)(boost,c)}
excluded   : {[boost,boost]}

Library defaults and class template interval

Как показано в приведенном выше примере, вы можете выбрать тип интервала, обобщая шаблон интервала контейнера с желаемым типом.

typedef interval_set<std::string, std::less, continuous_interval<std::string> > IdentifiersT;

Но вы можете работать с библиотекой по умолчанию для параметров интервальных шаблонов, что является interval<DomainT,Compare>::type.

интервалы

domain_type

интервал_по умолчанию

#ifdef BOOST_ICL_USE_STATIC_BOUNDED_INTERVALS

статичный

right_open_interval

#else

динамика

диск

discrete_interval

непрерывно

[ORIG_END] -->

continuous_interval

Итак, если вы всегда довольны по умолчанию библиотеки для интервального типа, просто используйте

icl::interval<MyDomainT>::type myInterval;

как стандартный способ объявления интервалов и параметров по умолчанию для интервальных контейнеров:

typedef interval_set<std::string> IdentifiersT;
IdentifiersT identifiers, excluded;
identifiers += interval<std::string>::right_open("a", "c");
. . .

Таким образом, шаблон класса interval предоставляет стандартный способ работы с библиотекой по умолчанию для интервалов. Via interval<D,C>::type можно объявить интервал по умолчанию. Кроме четырех статических функций

T interval<D,C>::right_open(const D&, const D&);
T interval<D,C>::left_open(const D&, const D&);
T interval<D,C>::closed(const D&, const D&);
T interval<D,C>::open(const D&, const D&);

T = interval<D,C>::type.

Если вы

#define BOOST_ICL_USE_STATIC_BOUNDED_INTERVALS

библиотека использует только статически ограниченную right_open_interval как тип интервала по умолчанию. В этом случае четыре статических функции выше также доступны, но они только перемещают интервальные границы последовательно, если их тип домена дискретен, и создают соответствующие right_open_interval, наконец:

interval<D,C>::right_open(a,b) == [a, b)  ->  [a  , b  )
interval<D,C>:: left_open(a,b) == (a, b]  ->  [a++, b++)
interval<D,C>::    closed(a,b) == [a, b]  ->  [a  , b++)
interval<D,C>::      open(a,b) == (a, b)  ->  [a++, b  )

Для непрерывных типов доменов применима только первая из четырех функций, которая соответствует стандарту библиотеки для статически ограниченных интервалов: right_open_interval. Остальные три функции не могут выполнять соответствующую трансформацию и не будут компилироваться.

Следующие две таблицы дают обзор более шаблоны классов icl.

Table 1.8. Set class templates

группа

шаблон

параметры

interval_sets

interval_set

<ДоменТ,Сравнить,ИнтервалТ,Аллок>

separate_interval_set

<ДоменТ,Сравнить,ИнтервалТ,Аллок>

split_interval_set

<ДоменТ,Сравнить,ИнтервалТ,Аллок>


Ниже подробно описываются шаблоны и параметры шаблонов, указанные в предыдущей таблице. Interval_sets представляют три шаблона класса interval_set, separate_interval_set и split_interval_set все имеют равные шаблонные параметры.

Table 1.9. Parameters of set class templates

тип элементов

порядок элементов

тип интервалов

распределение памяти

класс

template <class>class

класс

template <class>class

интервал

DomainT

Compare = std::less

interval_sets

DomainT

Compare = std::less

IntervalT = interval<DomainT,Compare>::type

Alloc = std::alloc


Следующие две таблицы дают обзор более шаблоны классов карт icl.

Table 1.10. map class templates

группа

шаблон

параметры

interval_maps

interval_map

<ДоменТ,КодменТ,Траит,Сравнить,Комбин,Раздел,ИнтервалТ,Аллоц><336>

split_interval_map

<ДоменТ,КодменТ,Траит,Сравнить,Комбин,Раздел,ИнтервалТ,Аллоц><336>

icl::map

icl::map

<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc>


Ниже подробно описываются шаблоны и параметры шаблонов, указанные в предыдущей таблице. Interval_maps представляют два шаблона класса interval_map и split_interval_map, что все имеют равные параметры шаблонов.

Table 1.11. Parameters of map class templates

элементы

отображенные значения

черта

порядок элементов

агрегация

распространение пересечения

тип интервалов

распределение памяти

класс

класс

класс

template <class>class

template <class>class

template <class>class

класс

template <class>class

interval_maps

DomainT

CodomainT

Правки = идентичность_абсорбер

Compare = std::less

Combine = inplace_plus

Section = icl::inplace_et

IntervalT = interval<DomainT,Compare>::type

Alloc = std::alloc

icl::map

DomainT

CodomainT

Правки = идентичность_абсорбер

Compare = std::less

Combine = inplace_plus

Section = icl::inplace_et

Alloc = std::alloc


Используя следующие владельцы мест,

D  := class DomainT,
C  := class CodomainT,
T  := class Traits,
cp := template<class D>class Compare = std::less,
cb := template<class C>class Combine = icl::inplace_plus,
s  := template<class C>class Section = icl::inplace_et,
I  := class IntervalT = icl::interval<D,cp>::type
a  := template<class>class Alloc = std::allocator

мы приходим к финальной синоптической матрице классовых шаблонов и их параметров.

interval     <D,       cp,             >
interval_sets<D,       cp,        I, a >
interval_maps<D, C, T, cp, cb, s, I, a >
icl::map     <D, C, T, cp, cb, s,    a >

Выбор параметров и их позиций следует за std::контейнерами как можно ближе, так что использование интервальных наборов и карт требует только минимальных дополнительных знаний.

Дополнительные знания требуются при моментализации параметра сравнения Compare или параметра распределения Alloc. В отличие от std::контейнеров, они должны быть мгновенными как шаблоны, например.

interval_set<string, german_compare>      sections; // 2nd parameter is a template
std::set<string, german_compare<string> > words;    // 2nd parameter is a type


PrevUpHomeNext

Статья Interface раздела Chapter 1. Boost.Icl Chapter 1. Boost.Icl может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Chapter 1. Boost.Icl ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 02:36:26/0.0070869922637939/0