【协程】C++是如何通过SFINAE来检查promise_type的

我们知道在C++20的协程中,自己实现的Coroutine中必须包含一个Promise,并且这个Promise必须要实现: get_return_object() initial_suspend() final_suspend() unhandled_exception() 少了其中任何一个,编译器都会报错。那这是怎么实现的呢?如果是像java那样是一个接口而没有对应的实现从而报错还能理解,但是我们的代码中的Promise完完全全是我们自己写的,也没有使用继承,编译器你怎么知道我在实现协程时少了什么东西呢? 答案就是:SFINAE(Substitution Failure Is Not An Error,替换失败不是错误)。 ...

2024-09-01 · 1 min · 109 words · Kerolt