【发布时间】:2018-01-29 13:33:36
【问题描述】:
我想折叠一个嵌套的std::future,例如
void foo(std::future<int>)
{
}
foo(fold(std::declval<std::future<std::future<std::shared_future<int>>>>());
这是我迄今为止没有成功的尝试。 std::future<void> 变体似乎特别有问题。
有什么建议吗?
#include <future>
#include <type_traits>
#include <string>
namespace detail {
template <typename T>
auto get(T&& f)
{
return f;
}
auto get(std::future<void>&& f)
{
return f.wait();
}
auto get(std::shared_future<void> f)
{
return f.wait();
}
template <typename T>
auto get(std::future<T>&& f)
{
return detail::get(f.get());
}
template <typename T>
auto get(std::shared_future<T> f)
{
return detail::get(f.get());
}
}
template <typename T>
auto fold(T&& f)
{
return std::async(std::launch::deferred, [f = std::move(f)]() mutable
{
return detail::get(f.get());
});
}
【问题讨论】:
-
您能谈谈使用情况吗?或者只是指定什么 exaclty 不能按预期工作(不编译)?现在,这个问题对我来说有点不清楚
标签: c++ c++14 std future c++17