// 我们假定这个模板函数是一个coroutine
template <typename TRet, typename … TArgs>
TRet func(TArgs args…)
{
body; // body里至少包含了co_await、co_yield、co_return三者之一。
}
// 它会被编译期展开成如下形式
template <typename TRet, typename ... TArgs>
TRet func(TArgs args...)
{
using promise_t = typename coroutine_traits<TRet, TArgs...>::promise_type;
promise_t promise;
auto __return__ = promise.get_return_object(); // 这个__return__会被编译器特殊处理
co_await promise.initial_suspend();
try
{ // co_return expr; => promise.return_value(expr); goto final_suspend;
body; // co_return; => promise.return_void(); goto final_suspend;
} // co_yield expr; => co_await promise.yield_value(expr);
catch (...)
{
promise.set_exception(std::current_exception());
}
final_suspend:
co_await promise.final_suspend();
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有