【问题标题】:Can virtual functions be C++20 coroutines?虚函数可以是 C++20 协程吗?
【发布时间】:2021-09-03 08:24:08
【问题描述】:

标题说明了一切:虚函数也可以是 C++20 协程吗?

struct A {
    virtual std::generator<int> generate() const = 0; // std::generator: C++23
};

struct B : A {
    virtual std::generator<int> generate() const { ~~~~ }
};

?

【问题讨论】:

  • 当你尝试的时候编译器说了什么?

标签: c++20 coroutine virtual-functions c++-coroutine


【解决方案1】:

是的。

来自cppreference

限制
协程不能使用可变参数、普通返回语句或占位符返回类型(auto 或 Concept)。
constexpr 函数、构造函数、析构函数和主函数不能是协程。

知道它们是如何工作的,我看不出有什么理由不允许这样做。

【讨论】:

  • 重要的是协程是函数定义的一个方面,而不是它的接口。从表面上看,协程只是一个立即返回广告类型的函数(这就是构造函数和析构函数不能参与的原因,以及它们不能使用 C 风格的可变参数的原因)。
  • 下一个:Main 作为一个协程,一个疯狂的研究。
  • @DavisHerring:注意:协程不必“立即”返回任何内容。
  • @Yakk-AdamNevraumont:不,这是明确不允许的。
  • @NicolBolas:是的;我只是说返回值确实是调用的值,并且通常出现在协程“真正工作”之前。
猜你喜欢
  • 2020-02-26
  • 2015-12-06
  • 2020-12-26
  • 1970-01-01
  • 2021-07-14
  • 2017-09-16
  • 2021-08-07
  • 2019-12-01
  • 1970-01-01
相关资源
最近更新 更多