c++理解协程03
Posted 周三石
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++理解协程03相关的知识,希望对你有一定的参考价值。
展开后,如下:
元<型名...O>
忽略中 测试协程(O...o){
用 T=协程特征<返回类型,O...>;
用 承诺类型=T::承诺类型;
用 帧类型=元组<帧前缀,承诺类型,O...>;
动*帧=(帧类型*)承诺类型::符号 新(的大小(帧类型));
动*p=的地址(取<1>(*帧));
忽略中*__中对象;
*__中对象={p->取中对象()};
{
//协待 p->初始挂起();
动&&临=p->初始挂起();
如(!临.准备好协()){
__内置保存协程()//帧->挂起索引=n;
如(临.挂起协(<协程句柄>)){
__挂起内置协程()//跳
}
}
恢复标签n:
临.恢复协();
}
试{
//协待 实验性::总是挂起{};
{
动&&临=实验性::总是挂起{};
如(!临.准备好协()){//准备好
__内置保存协程()//帧->挂起索引=m;
如(临.挂起协(<协程句柄>)){//挂起
__挂起内置协程()//跳
}
}
恢复标签m:
p->中空(临.恢复协());//恢复
//p->返回值(临.恢复协());
}
至 __止挂起点;
}抓(...){
p->未处理异常();
}
__止挂起点:
协待 p->止挂起();
__消灭点:
承诺类型::符号 删(帧,的大小(帧类型));
}
协待表达式,就是协待(co_await)后的运算对象.
该运算对象,必须包含await_ready,await_suspend,await_resume(准备好,挂起,恢复)三个函数.如,前面的总是挂起如下:
构 总是挂起{
极 准备好协()无异{
中 假;
}
空 挂起协(协程句柄<>)无异{}
空 恢复协()无异{}
};//该表达式,三个必备函数.
以上是关于c++理解协程03的主要内容,如果未能解决你的问题,请参考以下文章