我想在列表中存储使用async生成的多个线程的期货,以便稍后检索它们的结果。
future<int> f = async(doLater, parameter);
list<future<int>> l;
l.push_back(f);
但编译器会输出以下错误消息
/ usr / include / c ++ / 4.7 / bits / stl_list.h:115:71:错误:使用已删除的函数'std :: future&lt; _Res&gt; :: future(const std :: future&lt; _Res&gt;&amp; )[with _Res = int;的std ::未来&LT; _res&GT; = std :: future]'
我做错了什么或不是应该存储期货的名单?如果不是,那么使用什么呢?
答案 0 :(得分:14)
std::future
不可复制 - 您需要进入列表。之一:
future<int> f = async(doLater, parameter);
list<future<int>> l;
l.push_back(std::move(f));
或:
list<future<int>> l;
l.push_back(async(doLater, parameter));
将起作用,后者是优选的,因为它不会让一个移动的物体乱丢在范围内。