簡體   English   中英

如何將boost.lambda與boost.thread結合使用以獲取線程的返回值?

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

我正在嘗試做這樣的事情:

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM