Cur*_*ous 5 c++ boost asynchronous future c++11
我正在阅读关于改进std::future和std::promise这里的新 C++ 提案http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3857.pdf它说
一种常见的情况是 then 函数对象的主体本身将是一个基于 future 的操作,这导致 then() 返回一个 future>。在这种情况下,几乎总是你真正关心的是内在的未来,所以 then() 在返回之前执行一个隐式的 unwrap() (见下文)。
因此在下面的代码中
auto promise = std::promise<int>{};
auto another_future = promise.get_future().then([](auto future) {
return std::async([]() { return 1; });
});
Run Code Online (Sandbox Code Playgroud)
another_future是std::future<int>和不是的类型std::future<std::future<int>>
我试图用它boost::future来实现同样的事情,但似乎 boost 延续并没有隐含地解开未来。我可以做些什么来使升压期货具有相同的行为?似乎也没有unwrap()可用于生成的功能的功能。
我是否不得不通过构造函数手动打开未来?同样在尝试时出现以下错误,我该怎么办?
inline explicit BOOST_THREAD_FUTURE(
BOOST_THREAD_RV_REF(
BOOST_THREAD_FUTURE<BOOST_THREAD_FUTURE<R> >) other); // EXTENSION
Run Code Online (Sandbox Code Playgroud)
展开是 Boost Thread 的条件扩展:
#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();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
931 次 |
| 最近记录: |