2017-05-25 61 views
1

我讀新的C++關於改進std::futurestd::promise這裏http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3857.pdf建議,並說的boost ::未來。那麼()返回延續的boost ::未來

它是一種常見的情況是,身體的一個當時的函數對象 本身就是一個基於未來的操作,它導致then() 返回future。在這種情況下,幾乎總是您真正關心的是內部未來的情況,因此 在返回之前執行隱式unwrap()(請參見下文)。

下面的代碼

因此

auto promise = std::promise<int>{}; 
auto another_future = promise.get_future().then([](auto future) { 
    return std::async([]() { return 1; }); 
}); 

another_future類型是std::future<int>而不是std::future<std::future<int>>

我試圖用boost::future來達到同樣的事情,但它似乎像升壓延續不隱含地解開未來。有什麼我可以做的,以促進提振期貨的相同行爲?看起來好像沒有unwrap()函數可用於結果要素。

我堅持必須通過構造函數手動打開未來嗎?另外在嘗試我得到以下錯誤時,我該怎麼辦?

inline explicit BOOST_THREAD_FUTURE(
    BOOST_THREAD_RV_REF(
     BOOST_THREAD_FUTURE<BOOST_THREAD_FUTURE<R> >) other); // EXTENSION 

回答

1

解纏是升壓線程有條件擴展:

#define BOOST_THREAD_PROVIDES_FUTURE 
#define BOOST_THREAD_PROVIDES_FUTURE_UNWRAP 
#define BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION 
#include <boost/thread.hpp> 

int main() { 
    auto promise = boost::promise<int>{}; 
    boost::future<int> another_future = 
     promise.get_future().then([](auto) { 
      return boost::async([]() { return 1; }); 
     }).unwrap(); 
} 
相關問題