generator<int>
macht find
zu einer Genteratorfunktion
Stack-Frame wird nach Beendigung der Funktion entfernt
Stack-Frame bleibt erhalten, wenn die Coroutine unterbrochen wird
Eine Funktion ist eine Coroutine, wenn ..
co_await
co_yield
co_return
.. in ihrer Definition verwendet wird.
co_await
eigentlich?Expression
Compiler generiert
await_ready
: soll die Coroutine unterbrochen werden?await_suspend
: bereitet Unterbrechung vorawait_resume
: bereitet Fortführung vor
Beispiel
-start-
Hello
-resume-
Coroutine
-end-
Compiler erzeugt Speicher für das Coroutine-Frame:
Zugriff durch std::coroutine_handle<..>
std::coroutine_handle<..>
erfüllt NullablePointer Konzept
-start-
Hello
-resume-
Coroutine
value: 13279348532
-end-
-start-
Hello
-resume-
Coroutine
value: 42
-end-
co_yield
eigentlich?Expression
Compiler generiert
1
2
Anpassung von bestehenden Typen
Awaitable Transformation
co_await
operator overload
custom allocation
stackful "emulation"