Почему 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 все еще возвращает функцию? Какой смысл это делать?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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