在列表中存储未来

时间:2013-11-21 16:29:03

标签: c++ list c++11 stl future

我想在列表中存储使用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]'

我做错了什么或不是应该存储期货的名单?如果不是,那么使用什么呢?

1 个答案:

答案 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));

将起作用,后者是优选的,因为它不会让一个移动的物体乱丢在范围内。