【问题标题】:Why is a placeholder return type not allowed for coroutines?为什么协程不允许使用占位符返回类型?
【发布时间】:2019-12-16 08:32:36
【问题描述】:

根据C++20's coroutines specification

使用返回类型声明的函数 占位符类型不能是协程。

为什么在这种情况下不允许使用占位符类型?

【问题讨论】:

    标签: c++ placeholder c++20 c++-coroutine


    【解决方案1】:

    用于特定协程的协程机制主要基于函数的返回类型。返回类型为协程future,协程逻辑从中推导出协程promise对象,用于将协程生成的实际值通过返回的future传递给调用者。

    这意味着在co_awaitco_yieldco_return 中,没有一个实际上使用协程的返回类型(顺便说一句,这就是co_return 拼写的原因与return 不同;它具有不同的含义和行为,因此它得到不同的关键字)。 co_returnco_yield 本身没有给出未来类型;他们被赋予了一个承诺/未来可以封送给用户的类型。

    co_await 表达式的类型与协程的承诺/未来几乎没有关系。它只是一个值,协程可以通过它来安排其恢复,并且可以从中提取某种任意类型的值。预定的恢复并不真正关心当前协程的特定未来/承诺。你可以在std::future<T>co_await,即使你的协程的未来/承诺类型不是任何类型的std::future

    所以没有办法从提供给这些关键字的表达式中推断出协程的未来/承诺应该是什么。因此,您必须明确指定它。

    【讨论】:

      猜你喜欢
      • 2021-12-15
      • 2015-10-23
      • 1970-01-01
      • 2021-04-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多