折叠嵌套标准::未来
Fold nested std::future
我想折叠一个嵌套的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());
});
}
以下内容对我有用:
template <typename T>
auto fold(T&& x)
{
return x;
}
template <typename T>
auto fold(std::future<T>&& f)
{
return fold(f.get());
}
template <>
auto fold(std::future<void>&& f)
{
return f.get();
}
测试用例:
auto r0 = fold(std::future<std::future<std::future<int>>>{
std::async(std::launch::async, [] {
return std::async(std::launch::async, [] {
return std::async(std::launch::async, [] { return 0; });
});
})});
fold(std::future<std::future<std::future<void>>>{
std::async(std::launch::async, [] {
return std::async(std::launch::async, [] {
return std::async(std::launch::async, [] { return; });
});
})});
wandbox.org 上的现场示例
相关文章:
- 在Linux中哪里可以找到互斥、未来等的源代码
- 使用CMake检测支持的C++标准
- 如何理解C++标准N3337中的expr.const.cast子句8
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 编译标准库类型
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 编译器如何在使用SFINAE的函数和标准函数之间确定两者是否可行
- 铸造标准::有没有回到原来的类型
- 使用 std::string () const 函数启动线程或未来
- 未来C++标准支持"Declaring type template parameters with auto"
- 是否有一些东西限制了未来引入多个返回值C++标准?
- 为什么是标准::未来不阻塞
- 从标准::未来<void>到非标量标准::未来<bool>引发的错误转换
- 自动(toCast)显式转换是否计划在未来C++标准?
- 获取标准::未来<T>::wait_for的经过时间
- 折叠嵌套标准::未来
- 为什么我不能在标准::未来参数中使用引用
- 如何将标准::未来<T>转换为标准::未来<void>?
- 条件标准::未来和标准::异步