У меня есть некоторые трудности при написании правильного захвата для довольно простого лямбда-выражения.Вот код, который я пытаюсь скомпилировать:
#include <iostream>
#include <vector>
class State { public:
int i;
float f;
State(int i,float f){this->i = i; this->f = f;}
};
typedef State (*FunctionType)(const State &state);
int main(int argc, char **argv)
{
std::vector<FunctionType> funcs;
funcs.push_back(
[](const State &state)
{
return State(state.i+7,state.f-3.5);
});
State s(100,5.5);
int m = 5;
funcs.push_back(
[](const State &state)
// [=](const State &state)
// [&](const State &state)
{
return State(m,m+0.5);
});
for (auto func : funcs)
{
std::cout << func(s).i << " " << func(s).f << "\n";
}
return 0;
}
Когда я компилирую его с
$ g++ -std=c++17 main.cpp -o main
, я получаю следующую ошибку (и более), указывающую, что я не смогзахватить m
:
main.cpp: In lambda function:
main.cpp:32:17: error: ‘m’ is not captured
return State(m,m+0.5);
^
main.cpp:28:4: note: the lambda has no capture-default
[](const State &state)
^
main.cpp:25:6: note: ‘int m’ declared here
int m = 5;
^