【发布时间】:2019-12-16 08:32:36
【问题描述】:
【问题讨论】:
标签: c++ placeholder c++20 c++-coroutine
【问题讨论】:
标签: c++ placeholder c++20 c++-coroutine
用于特定协程的协程机制主要基于函数的返回类型。返回类型为协程future,协程逻辑从中推导出协程promise对象,用于将协程生成的实际值通过返回的future传递给调用者。
这意味着在co_await、co_yield 和co_return 中,没有一个实际上使用协程的返回类型(顺便说一句,这就是co_return 拼写的原因与return 不同;它具有不同的含义和行为,因此它得到不同的关键字)。 co_return 和 co_yield 本身没有给出未来类型;他们被赋予了一个承诺/未来可以封送给用户的类型。
而co_await 表达式的类型与协程的承诺/未来几乎没有关系。它只是一个值,协程可以通过它来安排其恢复,并且可以从中提取某种任意类型的值。预定的恢复并不真正关心当前协程的特定未来/承诺。你可以在std::future<T> 上co_await,即使你的协程的未来/承诺类型不是任何类型的std::future。
所以没有办法从提供给这些关键字的表达式中推断出协程的未来/承诺应该是什么。因此,您必须明确指定它。
【讨论】: