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

Addability, Subtractability and Aggregate on Overlap

Boost , Chapter 1. Boost.Icl , Concepts

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

В то время какдобавлениеивычитаниена<Sets>реализовано какустановленный союзиустановленная разница, для<Maps>мы хотим реализоватьагрегированиена соответствующие значения для случая столкновения (ключевых элементов) или перекрытия (ключевых интервалов), которое было обозначено какагрегат на перекрытиевыше. Этот вид<Addability>и<Subtractability>позволяет вычислить много полезных результатов агрегирования на<interval_map's>ассоциированных значениях, просто добавляя и вычитая пары значений. Различные примерысовокупного наложенияприведены всекционных примерах. Кроме того, это понятие<Addability>и<Subtractability>содержит классические<Insertability>и<Erasability>пары ключевых значений в качестве особого случая, поэтому оно обеспечивает более широкую новую семантику без потери классической.

Агрегация реализуется для функций<add>и<subtract>путем распространения функтора<Combiner>для объединения связанных значений типа<CodomainT>. Стандарт<Combiner>устанавливается в качестве параметра шаблона по умолчанию<template<class>classCombine=inplace_plus>, который снова в общем виде реализуется<operator+=>для всех типов Addable.

Для<Combine>функторов Icl предоставляет<inverse>функтор.

<Combine<T>>

<inverse<Combine<T> >::type>

<inplace_plus><<T>>

<inplace_minus><<T>>

<inplace_et><<T>>

<inplace_caret><<T>>

<inplace_star><<T>>

<inplace_slash><<T>>

<inplace_max><<T>>

<inplace_min><<T>>

<inplace_identity><<T>>

<inplace_erasure><<T>>

<Functor>

<inplace_erasure><<T>>

Метафункция<inverse>взаимно реализована для всех, кроме функтора по умолчанию<Functor>, такого, что, например,<inverse<inplace_minus<T>>::type>дает<inplace_plus<T>>. Не во всех случаях, например<max/min>, функтор<inverse>инвертирует эффект его антетипа. Но по умолчанию он делает:

<_add<Combine<CodomainT> >((k,x))>

<_subtract<inverse<Combine<CodomainT> >::type>((k,x))>

Инстанция

<_add<inplace_plus<int> >((k,x))>

<_subtract<inplace_minus<int> >((k,x))>

Инверсия

добавляет<x>наложение. Это переворачивает предыдущее<subtract>из<x>на<k>

.

вычитает<x>при перекрытии. Это переворачивает предыдущее<add>из<x>на<k>

.

Как уже упоминалось, агрегирование<Addability>и<Subtractability>на<Maps>содержитклассические<Insertability>и<Erasability>пары ключевых значений в качестве особого случая:

агрегирующая функция

эквивалентклассическийФункция

<_add<inplace_identity<CodomainT> >(const value_type&)>

<insert(constvalue_type&)>

<_subtract<inplace_erasure<CodomainT> >(const value_type&)>

<erase(constvalue_type&)>

Шаблоны функций агрегирования<_add>и<_subtract>не находятся в публичном интерфейсе<interval_maps>, потому что функтор<Combine>предназначен для того, чтобы быть инвариантом экземпляра шаблона<interval_map's>, чтобы избежать того, что клиенты портят агрегацию, случайно вызывая различные функторы агрегации. Но вы можете создать<interval_map>, чтобы иметь<insert/erase>семантику таким образом:

interval_map<int,int,partial_absorber,
             std::less,
             inplace_identity //Combine parameter specified
            > m;
interval<int>::type itv = interval<int>::rightopen(2,7);
m.add(make_pair(itv,42));      //same as insert
m.subtract(make_pair(itv,42)); //same as erase 

Это, конечно, только уточняющий пример. Функции-члены<insert>и<erase>доступны в интерфейсе<interval_map's>, поэтому их можно вызывать напрямую.


PrevUpHomeNext

Статья Addability, Subtractability and Aggregate on Overlap раздела Chapter 1. Boost.Icl Concepts может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Concepts ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 06:04:00/0.0092220306396484/1