Когда вы пишете больше функций лямбда, вы заметите определенные шаблоны, которые вы хотите рефакторировать как многоразовые функции. Когда вы достигнете этой точки, вы захотите, чтобы обычные функции сосуществовали с функциями Феникса. К сожалению,немедленноХарактер простых функций С++ делает их несовместимыми.
Ленивые функции — ваши друзья. Библиотека предоставляет возможность выполнять ленивые функции. Приведенный ниже код представляет собой переписывание функции<is_odd
>с использованием средства:
struct is_odd_impl
{
typedef bool result_type;
template <typename Arg>
bool operator()(Arg arg1) const
{
return arg1 % 2 == 1;
}
};
function<is_odd_impl> is_odd;
- Вычет типа результата осуществляется с помощью протокола result_of. Больше информации см.Возникновение
- <
is_odd_impl
>Осуществляет функцию.
- <
is_odd
>, пример<function<is_odd_impl>
>, является ленивой функцией.
Теперь<is_odd
>это действительно ленивая функция, которую мы можем использовать в сочетании с остальной частью Феникса. Пример:
std::find_if(c.begin(), c.end(), is_odd(arg1));
Функция.cpp
Библиотека переполнена STL-сообразительными, заранее определенными ленивыми функциями, охватывающими все STL-контейнеры, итераторы и алгоритмы. Например, существуют ленивые версии операций, связанных с контейнерами, такие как назначение, задняя часть, начало, pop_back, pop_front, push_back, push_front и т. Д. (см.STL).