Рассмотрим следующий код игрушки, чтобы определить, содержит ли диапазон элемент:
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;
}
... потому что это только вернется из лямбда, а не из функции.
Нужно ли мне бросать исключение, чтобы выбраться из лямбды? Опять же, есть, вероятно, десяток лучших решений этой конкретной проблемы, которые вообще не связаны с лямбдами, но это не то, о чем я прошу.