Ты действительно близко!Проблема в том, что вы напрямую вызываете add () с заполнителями лямбды - это не лениво оценивается внутри лямбды, а сразу.
Вот исправленная версия:
using namespace boost::lambda;
using boost::thread;
int sum, x=2, y=6;
thread adder(var(sum) = _1 + _2, x, y);
adder.join();
cout << sum;
если вы действительно хотите использовать функцию add
, вы должны использовать bind
:
using namespace boost::lambda;
using boost::thread;
int add(int a, int b) {return a+b;}
int sum, x=2, y=6;
thread adder(var(sum) = bind(add, _1, _2), x, y);
adder.join();
cout << sum;