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