Je veux stocker les futurs de plusieurs threads générés en utilisant async dans une liste pour récupérer leurs résultats plus tard.
future f = async(doLater, parameter); list<future> l; l.push_back(f);
Cependant, le compilateur affiche le message d’erreur suivant
/usr/include/c++/4.7/bits/stl_list.h:115:71: erreur: utilisation de la fonction supprimée ‘std :: future :: future (const std :: future &) [avec _Res = int; std :: future = std :: future] ‘
Est-ce que je fais quelque chose de mal ou est-ce que les listes ne sont pas supposées stocker les futures? Si ce n’est pas le cas, quoi utiliser à la place?
std::future
n’est pas copiable – vous devez vous déplacer dans la liste. Non plus:
future f = async(doLater, parameter); list> l; l.push_back(std::move(f));
ou:
list> l; l.push_back(async(doLater, parameter));
fonctionnera, ce dernier étant préférable car il ne laisse pas d’object déplacé jaillissant du champ d’application.