我正在尝试做这样的事情:
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) = add(_1, _2), x, y);
adder.join();
cout << sum;
我收到编译错误:
无法将参数1从'boost :: arg'转换为'int'
答案 0 :(得分:5)
你真的很亲密!问题是你直接使用Lambda的占位符调用add() - 它不会在lambda中懒惰地进行评估,而是立即进行。
这是一个固定版本:
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;