首页 > 编程语言 >C++协程

C++协程

时间:2023-03-10 22:23:16浏览次数:52  
标签:handle generator coroutine int C++ return value 协程

参考C++那些事之C++20协程

#include <iostream>
#include <coroutine>

struct generator {
    struct promise_type {
        int current_value;
        std::suspend_always yield_value(int value) {
            current_value = value;
            return {};
        }
        std::suspend_always initial_suspend() { return {}; }
        std::suspend_always final_suspend()  noexcept  { return {}; }
        generator get_return_object() { return generator{this}; }
        void return_void() {}
        void unhandled_exception() {}
    };

    generator(promise_type* p)
        : coroutine_handle{std::coroutine_handle<promise_type>::from_promise(*p)} {}

    ~generator() { coroutine_handle.destroy(); }

    std::coroutine_handle<promise_type> coroutine_handle; // 协程句柄,用于管理暂停或执行的协程以及Promise对象

    int next() {
        coroutine_handle.resume();
        return coroutine_handle.promise().current_value;
    }
};

generator fib(int n) {
    int a = 0, b = 1;
    while (n--) {
        co_yield b;
        auto t = a;
        a = b;
        b += t;
    }
}

int main() {
    auto gen = fib(10);
    for (int i = 0; i < 10; i++) {
        std::cout << gen.next() << '\n';
    }
}

标签:handle,generator,coroutine,int,C++,return,value,协程
From: https://www.cnblogs.com/codingbigdog/p/17204811.html

相关文章

  • C/C++小学生测验[2023-03-10]
    C/C++小学生测验[2023-03-10]题目2:小学生测验面向小学1~2年级学生,随机选择两个整数和加减法形成算式要求学生解答。功能要求:(1)进入测试之前先输入用户名、密码登录,......
  • C++的常量
    在C++中,常量可以分为以下几种类型:1、整型常量(IntegerConstants):整数常量,可以是十进制、八进制或十六进制,例如42、052、0x2A等。整型常量可以使用后缀来指定类型。u......
  • 如何通过C++ 将数据写入 Excel 工作表
    直观的界面、出色的计算功能和图表工具,使Excel成为最流行的个人计算机数据处理软件。在独立的数据包含的信息量太少,而过多的数据又难以理清头绪时,制作成表格是数据管理的最......
  • C++ 数组 指针小记
    voidfun(int*aa){return;}int*a=newint[16];memset(a,0,16);fun(a);voidfun(int*aa){return;}inta[16]={0};fun(a);  总之,两......
  • go 协程收集 不同函数结果和error
    需要用到"golang.org/x/sync/errgroup"这个库改成并行的方式这个总共执行4s就可以......
  • matlab2c使用c++实现matlab函数系列教程-sort函数
    ​​​​全栈工程师开发手册(作者:栾鹏)​​matlab2c动态链接库下载​​​matlab库函数大全matlab2c基础教程matlab2c开发全解教程matlab2c调用方法:1、下载动态链接库2、......
  • matlab2c使用c++实现matlab函数系列教程-trace函数
    ​​​​全栈工程师开发手册(作者:栾鹏)​​matlab2c动态链接库下载​​​matlab库函数大全matlab2c基础教程matlab2c开发全解教程matlab2c调用方法:1、下载动态链接库2、......
  • matlab2c使用c++实现matlab函数系列教程-reshape函数
    ​​​​全栈工程师开发手册(作者:栾鹏)​​matlab2c动态链接库下载​​​matlab库函数大全matlab2c基础教程matlab2c开发全解教程matlab2c调用方法:1、下载动态链接库2、......
  • matlab2c使用c++实现matlab函数系列教程-triu函数
    ​​​​全栈工程师开发手册(作者:栾鹏)​​matlab2c动态链接库下载​​​matlab库函数大全matlab2c基础教程matlab2c开发全解教程matlab2c调用方法:1、下载动态链接库2、......
  • C++--类和对象--初始化列表, stattic
             ......