Я пытаюсь воспроизвести API потоков Java на C++ и сделал эту программу до сих пор.C++ lambdas, "error: expected expression"
#include <iostream>
using namespace std;
template <typename E>
class stream {
virtual void collect(void (*consumer) (E)) = 0;
virtual bool anyMatch(bool (*predicate) (E)) {
bool found = false;
collect([&found](E obj) -> { if (predicate(obj)) {found = true} });
return found;
}
};
int main() {
return 0;
}
Но когда я пытаюсь скомпилировать его с г ++:
Что я делаю неправильно лямбда? Предполагается предоставить функцию (потребитель), которая проверит данный E с предикатом (функцией), и если он даст значение true, установите значение true.
Это не лениво. Одно из главных преимуществ потоков над стандартными алгоритмами (* cough * 'std :: accumulate',' std :: any_of') состоит в том, что они ленивы. Для этого уже есть библиотеки, такие как range-v3, которые в какой-то момент должны стать стандартными. – chris
Да, я просто стараюсь учиться C++ – Phoenix
Только lambdas без захватов конвертируются в простые указатели функций. Лямбда с захватами не может этого сделать - у нее не будет места для хранения этих снимков. –