【发布时间】:2020-07-31 02:29:12
【问题描述】:
我想知道是否可以找到等待的 co_await 的结果类型: 由于不可能在未评估的上下文中使用 co_await,我不能这样做
template<class Awaitable>
task<> f(Awaitable&& awaitable)
{
using result_type = decltype(co_await awaitable);
}
有什么办法可以做到吗?
这里的主要目的是确定result_type是否为void,这基本上是我们所拥有的:我们想fire_and_forget一个任务,并在完成时调用一个方法,但由于void返回类型,它不是那个容易
template<class Awaitable, class Success, class Failure >
detail::fire_and_forget_task call_async_then(Awaitable awaitable, Success success, Failure failure)
{
try
{
using result_type = ??
if constexpr (std::is_same_v<void, result_t>)
{
co_await awaitable;
success();
}
else
success(co_await f);
}
catch(...)
{
failure(std::current_exception());
}
}
也许有更简单的方法可以做到,但现在我没有想到任何方法。
谢谢
【问题讨论】:
标签: c++ c++20 c++-coroutine