给出std::vector
std::futures
std::vector<std::future<void>> futures;
当我传递一个右值时,std::fill_n
怎么抱怨我调用了复制构造函数:
std::fill_n(std::back_inserter(futures), 10, std::async([]{ std::cout << "yo\n"; }));
error: use of deleted function future(const future&)
我的意思是,fill_n
没有获得xvalue?如果没有,为什么不呢?
答案 0 :(得分:5)
std::fill_n
使得给定对象的副本作为第三个参数传递,但第三个参数是一个不可复制的未来对象,因为复制未来没有意义。因此错误。
看来你需要这个:
std::generate_n(std::back_inserter(futures),
10,
[]{ return std::async([]{ std::cout << "yo\n"; }); });