在5.3.2节的例子中,我通过一个非 const引用向线程传递参数。只有当希望任务有权修改引用所引的数据时,我才会这么做(见77节)。这种返回结果的方法有点不正规,但并不少见。一种不那么晦涩的技术是将输入数据以 const引用的方式传递,并将保存结果的内存地址作为第二个参数传递给线程。
void f(const vector<double>& v,double* res); //从v获取输入,将结果放入*resclass F{public:F(const vector<double>& vv,double* p):v{VV},res{p}{}void operator()(); //将结果放入/resprivate:const vector<double>& v; //输入源double* res;};int main(){vector<double> some_vec;vector<double> vec2;//...double res1;double res2;thread t1{f,some_vex,&res1}; //f(some_vec,&res1)在一个独立线程中执行thread t2{F{vec2,&res2}}; //F{vec2,&res2}()在一个独立线程中执行t1.join();t2.join();cout<<res1<<" "<<res2<<'\n';}
我不认为通过参数返回结果是一种很优雅的方法。我们将在5.3.5.1节再次讨论这个问题。
