Console Library 8.0.0
A header-only library that makes C++ simple
Loading...
Searching...
No Matches
coroutine.h File Reference

轻量级 C++ 协程/生成器宏实现。 More...

#include <functional>
#include <memory>
#include <utility>
#include "../core/csexc.h"

Go to the source code of this file.

Classes

class  console::Coroutine< Ret(Args...)>

Namespaces

namespace  console
 本库所有组件所在的顶层命名空间。

Macros

#define cr_begin(type, ...)
 开始一个协程/生成器函数。
#define cr_yield(value)
 从协程中产生一个值并挂起执行。
#define cr_return(value)
 从协程中返回值,并立刻终止协程。
#define cr_throw(exception)
 从协程中抛出一个异常,并立刻终止协程。
#define cr_end
 结束一个协程/生成器函数。

Detailed Description

轻量级 C++ 协程/生成器宏实现。

一个极度轻量、基于宏的状态机协程实现,仅占用一个 int 状态变量。 通过宏,将普通函数转换为可多次调用、每次产生一个值的生成器。 可以使用持久化变量保存状态,调用方在每次调用后得到下一个产出值。

Author
MrXie1109
Date
2026

Macro Definition Documentation

◆ cr_begin

#define cr_begin ( type,
... )
Value:
int _state = 0; \
return [=](__VA_ARGS__) mutable -> type { \
switch (_state) { \
case 0:

开始一个协程/生成器函数。

该宏定义一个协程的起点。它初始化状态变量并返回一个可调用的 lambda 函数对象, 该对象在每次调用时根据内部状态继续执行协程。

Parameters
type协程的返回类型 (例如 int 或 double)。
...协程函数的参数列表 (例如 int a, int b)。
Note
必须与 cr_end 配合使用。

◆ cr_end

#define cr_end
Value:
_state = __LINE__; \
case __LINE__:; \
break; \
} \
throw console::StopIteration("StopIteration"); \
}
表示试图对已结束的生成器调用 next()。
Definition csexc.h:174

结束一个协程/生成器函数。

该宏标记协程的结束。当协程执行完毕后再次被调用时, 抛出 StopIteration 异常。

Note
必须与 cr_begin 配合使用。

◆ cr_return

#define cr_return ( value)
Value:
do { \
_state = __LINE__; \
return value; \
case __LINE__: \
throw console::StopIteration("StopIteration"); \
} while (false)

从协程中返回值,并立刻终止协程。

该宏保存当前执行位置 (通过 LINE),返回指定值给调用者。 协程会立刻被终止,下次调用协程时,将会得到 StopIteration。

Parameters
value要产生的值。
Note
必须与 cr_begin 和 cr_end 配合使用。

◆ cr_throw

#define cr_throw ( exception)
Value:
do { \
_state = __LINE__; \
throw exception; \
case __LINE__: \
throw console::StopIteration("StopIteration"); \
} while (false)

从协程中抛出一个异常,并立刻终止协程。

该宏保存当前执行位置 (通过 LINE),抛出指定异常给调用者。 协程会立刻被终止,下次调用协程时,将会得到 StopIteration。

Parameters
exception要抛出的异常。
Note
必须与 cr_begin 和 cr_end 配合使用。

◆ cr_yield

#define cr_yield ( value)
Value:
do { \
_state = __LINE__; \
return value; \
case __LINE__:; \
} while (false)

从协程中产生一个值并挂起执行。

该宏保存当前执行位置 (通过 LINE),返回指定值给调用者。 下次调用协程时,将从该位置继续执行。

Parameters
value要产生的值。
Note
必须与 cr_begin 和 cr_end 配合使用。