Как вернуться из функции внутри лямбда?

Рассмотрим следующий код игрушечного кода, чтобы определить, содержит ли диапазон элемент:

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;
}

... потому что это только вернется из лямбда, а не от Функция.

Мне нужно выбрасывать исключение, чтобы выйти из лямбда? Опять же, вероятно, есть дюжина лучших решений этой конкретной проблемы, которая вообще не вовлекает лямбдас, но это не то, что я прошу

16
задан fredoverflow 3 September 2011 в 07:00
поделиться