我刚刚开始学习c++并行编程,想使用HPX。我需要以N为组完成几个任务,我想编写代码,将所有线程放入一个向量中,当至少一个线程完成时,将其替换为下一个线程。
#include <iostream>
#include <vector>
#include "hpx/hpx_main.hpp"
#include "hpx/future.hpp"
using namespace std;
int dummy(int a){
return a;
}
int main(){
vector<hpx::future<int>>futures;
futures.reserve(3);
for(int step = 0; step < 3; step++){
futures.push_back(hpx::async(dummy, step));
}
int index;
auto f2 = hpx::when_any(futures).then([&](auto f){
return f;
});
auto res = f2.get();
vector<hpx::future<int>> fut3 = res.futures;
for(int i = 0; i < fut3.size(); i++){
cout << fut3[i].get() << endl;
}
}
此代码导致以下错误:
错误:静态断言失败:结果类型必须由输入类型
构造我试着在网上找到解决方案,但是几乎没有任何带有hpx的代码示例。
尝试在复制结果期货时添加std::move
:
std::vector<hpx::future<int>> fut3 = std::move(res.futures);
问题是拷贝完成后res.futures
失效。