![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
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.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
реклама |