je lisais la nouvelle proposition C de ce qui concerne l'amélioration de std::future
et std::promise
ici http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3857.pdf et il ditboost :: avenir .alors() continuations boost retour :: avenir
Il est une situation commune que le corps de un objet de fonction alors lui-même sera une opération future, ce qui conduit à la() renvoyant un futur>. Dans ce cas, il est presque toujours le cas que ce qui vous intéresse vraiment est l'avenir interne, alors() effectue un unwrap implicite() (voir ci-dessous) avant de retourner.
Par conséquent, dans le code suivant
auto promise = std::promise<int>{};
auto another_future = promise.get_future().then([](auto future) {
return std::async([]() { return 1; });
});
le type de another_future
est std::future<int>
et non std::future<std::future<int>>
Je tentais d'utiliser boost::future
pour obtenir la même chose, mais il semble que continuations boost ne pas Développer implicitement le futur. Y a-t-il quelque chose que je peux faire pour permettre le même comportement à partir des contrats à terme de boost? Il semble qu'il n'y ait pas de fonction unwrap()
disponible pour utiliser la fonction résultante. Suis-je obligé de déballer le futur via un constructeur manuellement? Aussi en essayant que je reçois l'erreur suivante, que dois-je faire?
inline explicit BOOST_THREAD_FUTURE(
BOOST_THREAD_RV_REF(
BOOST_THREAD_FUTURE<BOOST_THREAD_FUTURE<R> >) other); // EXTENSION