C++ 如何将boost.lambda与boost.thread一起使用以获取线程';返回值是多少?

C++ 如何将boost.lambda与boost.thread一起使用以获取线程';返回值是多少?,c++,multithreading,boost,lambda,C++,Multithreading,Boost,Lambda,我正在尝试这样做: 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; 使用名称空间boost::lambda; 使用boost::thread; intadd(inta,int

我正在尝试这样做:

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;
使用名称空间boost::lambda;
使用boost::thread;
intadd(inta,intb){返回a+b;}
整数和,x=2,y=6;
线程加法器(var(sum)=加法(_1,_2),x,y);
adder.join();

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

要延迟函数调用的调用,请使用
bind
。我确实需要使用该函数,“add”示例非常简单。:)但我尝试了以下语法:
线程加法器(var(sum)=bind(add,_1,_2),x,y)我在MSVC 9(boost 1.43)上遇到一个错误。修剪以适合:
boost/lambda/detail/function_adapters.hpp(260):错误C2664:“int(int,int)”:无法使用[Result=int,Func=int(int,int)将参数2从“rt2”转换为“int”,RET=int,A2=rt1,A3=rt2,Arg1=int,Arg2=int,A1=rt1,I=2]
Nevermind。我忘了使用boost::lambda::_1等等。我想知道为什么我没有得到一些更能说明问题的错误。我甚至不确定我在范围内有哪个_1/_2!我没有为boost或std使用任何名称空间。请确保您使用的是boost::lambda::_1——boost中定义了许多位置,因此很容易使用错误的位置。我想这会解决你的问题。
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;