如何将 boost.lambda 与 boost.thread 一起使用来获取线程的返回值?

How do I use boost.lambda with boost.thread to get the thread's return value?

本文关键字:boost 获取 线程 返回值 一起 lambda thread      更新时间:2023-10-16

我正在尝试做这样的事情:

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'

你真的很接近! 问题在于,你直接使用 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;