2
Как я могу использовать boost-поток с C++ 11 lambda?boost thread with C++ 11lambda
Следующий код не работает:
int sum;
m_workerThread=new boost::thread([]()
{
for(int i=0;i<100;i++)
{
sum=sum+i;
}
}
);
Я получаю ошибку компиляции.
Error 4 error C3493: 'sum' cannot be implicitly captured because no default capture mode has been specified
Как это исправить?
спасибо. В чем смысл захвата, и я могу видеть из других ответов, что [=], .. также доступно, что, если у меня есть класс и есть несколько переменных? – mans
@mans '[=]' подразумевает неявное захват всех переменных по-значению, что здесь неверно, потому что вам нужно захватить по ссылке. Для этого '[&]' подразумевает неявное захват всех переменных по ссылке. Но всегда хорошо быть конкретным. – Barry
Спасибо. Правильно ли я полагаю, что [&] означает, что сумма за пределами лямбда является обновлением, [=] означает, что значение суммы фиксируется при запуске, но не обновляется (например, передача суммы в функцию). есть ли у нас другой вариант? – mans