Лучшее имя, необходимое для применения функции на элементах контейнера

У меня есть контейнерный класс (содержащий мультииндексный контейнер), для которого у меня есть общественность "foreach" функция членства, таким образом, пользователи могут передать функтор для применения на все элементы.
При реализации у меня был случай, где функтор должен только быть применен к некоторым элементам диапазона в контейнере, таким образом, я перегрузил foreach, для передачи некоторого допустимого диапазона.
Теперь, в некоторых случаях, стоило остановиться на определенном условии, так практически, я позволяю foreach остановиться на основе возвращаемого значения функции.

Я доволен тем, как система работает, но у меня есть одно беспокойство:
Как должен "foreach" на диапазоне, с условиями остановки быть названным?
Кто-либо знает универсальное, ясное и краткое имя?

6
задан stefaanv 26 May 2010 в 09:03
поделиться

6 ответов

Исходя из вашего описания, я бы выбрал apply_until () .

6
ответ дан 10 December 2019 в 00:34
поделиться

Может быть до или что-то в этом роде?

2
ответ дан 10 December 2019 в 00:34
поделиться

Я бы назвал это либо foreach_until, либо foreach_while (пытаясь следовать соглашению, основанному на функциях _if, таких как replace_if и remove_if, за исключением того, что условие здесь не "если" каждый из них истинен, а "пока" не выполнится конечное условие). Или просто foreach. std::for_each игнорирует возвращаемое значение функтора, но это не обязательно означает, что ваша функция, вызванная foreach, должна это делать. Я думаю, что это довольно распространенная идиома для функции обратного вызова иметь возвращаемое значение, позволяющее досрочно выйти из управляющего цикла.

Если обратный вызов возвращает либо значение false (для продолжения), либо значение true (для остановки), то можно вызвать функцию find_if. По сути, это то, что нужно, и это можно реализовать, используя std::find_if, даже если вызывающего не интересует, какой итератор спровоцировал условие завершения.

1
ответ дан 10 December 2019 в 00:34
поделиться

родовое имя? ConditionalIterator? RangeIterator? Или, поскольку это функция, возможно, IterateRange?

0
ответ дан 10 December 2019 в 00:34
поделиться

Как насчет find_if (...) , как в stl?

0
ответ дан 10 December 2019 в 00:34
поделиться

Если вы можете предоставить функцию подмножества, которая возвращает представление интересующих элементов, возможно, вам не понадобится apply_until (). Просто myContainer.subset (3, 17) .foreach (myFunctor) Я думаю, что это лучшее разделение проблем.

1
ответ дан 10 December 2019 в 00:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: