Архитектурная акустика/Реализация/make_iterator_adapter
Перейти к навигации
Перейти к поиску
template <template <class ...> class _Adapter, class ... _AdapterParams>
auto make_iterator_adapter(_AdapterParams&& ... adapter_params) -> /*См. описание*/
Создает заданный адаптер с дедукцией его конкретного типа.
- Параметры шаблона
_Adapter Шаблон, который задает используемый адаптер. Специализируется частью параметров _AdapterParams..., в результате задавая тип создаваемого адаптера. _AdapterParams Набор вычисляемых дедукцией типов аргументов, поданных в качестве adapter_params... на вход функции. - Параметры
adapter_params... Набор параметров, на основе которых создается адаптер. Первые параметры используются для дедукции типов, которые специализируют шаблон _Adapter. - Возвращаемое значение:
- Созданный адаптер.
Первая часть аргументов adapter_params используется для выведения конкретного типа адаптера - специализации шаблона _Adapter. То какая эта часть определяется шаблоном _Adapter. Например, первые один или два аргумента могут задавать типы итераторов в соответствующих измерениях, что дает возможность специализировать ими шаблон IteratorAdapter2D при вызовах:
auto it2D = make_iterator_adapter<IteratorAdapter2D>(container.begin(), container.begin()->begin());
make_iterator_adapter<IteratorAdapter2D>(container.begin());
Вторая часть аргументов adapter_params делегируется конструкторам адаптера.
Пример
auto itChain = make_iterator_adapter<IteratorAdapterConditional>(
make_iterator_adapter<IteratorAdapterForStep>(
i,
std::thread::hardware_concurrency(),
adapt_iterator_range<IteratorAdapter2D>(cont.crbegin(), cont.crend())
),
[](IteratorAdapterForStep<IteratorAdapter2D<Matrix<int>::const_reverse_iterator>> _it) -> bool {return (*_it & 1) == 0; },
[&cont](auto _it) -> bool {return _it.adaptation_base() != cont.crend(); }
);