cpp / expert
Snippet
Unendliche Stream-Verarbeitung mit Coroutinen
C++20-Coroutinen bieten eine leistungsstarke Möglichkeit, Lazy Evaluation zu implementieren. Ein Generator kann Werte nacheinander liefern und seine Ausführung unterbrechen, bis der nächste Wert angefordert wird, was ideal für die Verarbeitung unendlicher Sequenzen ist.
snippet.cpp
cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <coroutine>#include <iostream>struct Generator {struct promise_type {int current_value;auto get_return_object() { return Generator{std::coroutine_handle<promise_type>::from_promise(*this)}; }auto initial_suspend() { return std::suspend_always{}; }auto final_suspend() noexcept { return std::suspend_always{}; }auto yield_value(int value) { current_value = value; return std::suspend_always{}; }void unhandled_exception() { std::terminate(); }void return_void() {}};std::coroutine_handle<promise_type> handle;};
Erklärung
1
struct promise_type
Der interne State-Machine-Controller, der für C++20-Coroutinen erforderlich ist.
2
yield_value(int value)
Erfasst den Wert und unterbricht die Funktion, wobei die Kontrolle an den Aufrufer zurückgegeben wird.
3
std::suspend_always{}
Ein Standard-Awaitable, das die Ausführung an der angegebenen Stelle immer pausiert.