Почему ranges::for_each возвращает функцию?C++

Программы на C++. Форум разработчиков
Anonymous
Почему ranges::for_each возвращает функцию?

Сообщение Anonymous »


Устаревшая функция std::for_each возвращает функцию, поскольку стандартная только требует, чтобы Function соответствовала Cpp17MoveConstructible в соответствии с [alg.foreach]:

шаблон constexpr Function for_each (сначала InputIterator, последний InputIterator, функция f); Предварительные условия: Функция соответствует требованиям Cpp17MoveConstructible.

[Примечание: Функция не обязательно должна соответствовать требованиям Cpp17CopyConstructible. последнее примечание]

Это разумно, поскольку пользователь может захотеть повторно использовать функцию после вызова.

Параллельная версия for_each не имеет возврата:

шаблон void for_each(ExecutionPolicy&& exec, Сначала ForwardIterator, потом ForwardIterator, Функция f); Предварительные условия: Функция соответствует требованиям Cpp17CopyConstructible.

Это связано с тем, что стандарт требует, чтобы Function соответствовал Cpp17CopyConstructible, поэтому возврат функции не требуется, поскольку пользователь может свободно создать копию. если они хотят на стороне вызова.

Я заметил, что ranges::for_each также возвращает функцию:

template constexpr ranges::for_each_result ranges::for_each(I первый, S последний, Fun f, Proj proj = {}); Однако сигнатура функции уже требует, чтобы Fun удовлетворял indirectly_unary_invocable, что уже гарантирует возможность копирования.

Вопрос в том, почему ranges::for_each все еще возвращает функцию? Какой смысл это делать?

Вернуться в «C++»