Рассмотрим следующий код игрушечного кода, чтобы определить, содержит ли диапазон элемент:
template<typename Iter, typename T>
bool contains1(Iter begin, Iter end, const T& x)
{
for (; begin != end; ++begin)
{
if (*begin == x) return true;
}
return false;
}
(да, я знаю, уже есть совершенно хорошие алгоритмы в стандартной библиотеке, это не точка ,)
Как бы я написал то же самое с for_each
и лямбда? Ниже не работает не работает ...
template<typename Iter, typename T>
bool contains2(Iter begin, Iter end, const T& x)
{
std::for_each(begin, end, [&x](const T& y) {
if (x == y) return true;
});
return false;
}
... потому что это только вернется из лямбда, а не от Функция.
Мне нужно выбрасывать исключение, чтобы выйти из лямбда? Опять же, вероятно, есть дюжина лучших решений этой конкретной проблемы, которая вообще не вовлекает лямбдас, но это не то, что я прошу