[英]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.