Я почти уверен, что это не сработает. Зачем? потому что break
- это статическая операция; то есть место назначения для break
определяется во время компиляции. Помещение его в лямбду (с l oop внешним по отношению к лямбде) делает невозможным для компилятора видеть, где «перейти к».
Пример без параллелизма:
vector<int> v {1,2,3,4,5,6,7,8,9};
std::for_each(v.begin(), v.end(),
[](int i) { cout << i << ' '; if (i == 5) break; });
cout << endl;
дает мне следующую ошибку:
so.cpp:10:45: error: 'break' statement not in loop or switch statement
[](int i) { cout << i << ' '; if (i == 5) break; });
Чтобы ответить на ваш вопрос; Я не думаю, что есть хороший способ выйти из for_each
в параллельном алгоритме. В непараллельном случае вы можете создать исключение, но в параллельном случае это не сработает.