![]()  | 
![]() ![]() ![]() ![]()  | 
![]()  | 
Addability, Subtractability and Aggregate on OverlapBoost , Chapter 1. Boost.Icl , Concepts
  
  
   | 
|||||||||||||||||||||||||||||||||||
| 
                 <  | 
                 <  | 
|---|---|
<  | 
<  | 
<  | 
<  | 
<  | 
<  | 
<  | 
<  | 
<  | 
<  | 
<  | 
<  | 
Метафункция<inverse>взаимно реализована для всех, кроме функтора по умолчанию<Functor>, такого, что, например,<inverse<inplace_minus<T>>::type>дает<inplace_plus<T>>. Не во всех случаях, например<max/min>, функтор<inverse>инвертирует эффект его антетипа. Но по умолчанию он делает:
| 
                 <  | 
                 <  | 
|
|---|---|---|
Инстанция  | 
<  | 
<  | 
Инверсия  | 
добавляет<  | 
вычитает<  | 
Как уже упоминалось, агрегирование<Addability>и<Subtractability>на<Maps>содержитклассические<Insertability>и<Erasability>пары ключевых значений в качестве особого случая:
| 
                 агрегирующая функция  | 
                 эквивалентклассическийФункция  | 
|---|---|
<  | 
<  | 
<  | 
<  | 
Шаблоны функций агрегирования<_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>, поэтому их можно вызывать напрямую.
Статья Addability, Subtractability and Aggregate on Overlap раздела Chapter 1. Boost.Icl Concepts может быть полезна для разработчиков на c++ и boost.
реклама  |