Архитектурная акустика/Реализация/adapt_iterator_range
Перейти к навигации
Перейти к поиску
template <template <class ...> class _Adapter, class _BeginIteratorPosType, class _EndIteratorPosType, class ... _AdaptationParametersToDistribute>
auto adapt_iterator_range(_BeginIteratorPosType&& itBegin, _EndIteratorPosType&& itEnd, _AdaptationParametersToDistribute&& ... generic_adapter_params) -> /*См. описание*/ //1
template <template <class ...> class _Adapter, class _BaseRange, class ... _AdaptationParametersToDistribute>
auto adapt_iterator_range(_BaseRange&& base_range, _AdaptationParametersToDistribute&& ... generic_adapter_params) -> /*См. описание*/ //2
Создает объект Chusov::Memory::iterator_range, который задает множество элементов с помощью пары итераторов, соответствующих границам множества.
- Параметры шаблона
_Adapter Шаблон, который задает используемый адаптер. Специализируется частью параметров _AdaptationParametersToDistribute..., в результате задавая тип создаваемого адаптера. _BeginIteratorPosType Тип адаптируемого итератора, задающего начальную позицию на множестве перечисляемых элементов. _EndIteratorPosType Тип адаптируемого итератора, задающего первый (псевдо-) элемент за последним элементом из множества перечисляемого итераторами. _BaseRange Тип объекта, реализующего методы begin и end (без параметров), которые, соответственно, возвращают начальный и конечный итераторы, определяющие границы множества. _AdaptationParametersToDistribute... Набор вычисляемых дедукцией типов аргументов, поданных в качестве generic_adapter_params... на вход функции. Используются для инициализации обоих итераторов. - Параметры
itBegin Итератор, задающий первый элемент множества. itEnd Итератор, задающий первый (псевдо-) элемент за последним элементом множества. base_range Объект, задающий аналогичную пару итераторов методами begin и end без параметров. ...generic_adapter_params Набор параметров в дополнение к итераторам для инициализации создаваемых итераторов-адаптеров, задающих возвращаемый диапазон элементов. - Возвращаемое значение:
- Созданный объект Chusov::Memory::iterator_range, специализированный для итераторов-адаптеров.
Вызов
adapt_iterator_range<IteratorAdapter>(vector, param_1, param_2);
Эквивалентен вызову
Chusov::Memory::make_iterator_range(
make_iterator_adapter(vector.begin(), param_1, param_2),
make_iterator_adapter(vector.end(), param_1, param_2)
);
Пример
auto itChain = adapt_iterator_range<IteratorAdapterConditional>(
adapt_iterator_range<IteratorAdapterForStep>(
i,
std::thread::hardware_concurrency(),
adapt_iterator_range<IteratorAdapter2D>(container)
),
[](IteratorAdapterForStep<IteratorAdapter2D<container::iterator>> _it) -> bool {return (*_it & 1) == 0; },
[&cont](auto _it) -> bool {return _it.adaptation_base() != cont.crend(); }
);