kennen:include:expected
Dies ist eine alte Version des Dokuments!
<expected>
Ein std::expected<R,E>
enthält entweder das Ergebnis einer Berechnung (R
= Resultat) oder eine Angabe, warum die Berechnung scheiterte (E
= Error):
- expected.cpp
#include <expected> #include <print> #include <string> std::expected<int, std::string> question(int n) { if (n == 42) return n; else return std::unexpected{ n < 42 ? "zu klein" : "zu groß" }; } int main() { for (int n : { 6, 7, 8, 9 }) { auto answer = question(6*n); if (answer.has_value()) std::println("Die richtige Antwort ist {}", answer.value()); else std::println("Fehler: {}", answer.error()); } }
Methoden
has_value() | Ist Wert vorhanden? |
value() | erwarteter Wert |
error() | unerwarteter Wert |
value_or(x) | Alternative, falls erwarteter Wert nicht vorhanden |
error_or(e) | Alternative, falls erwarteter Wert vorhanden |
Außerdem sind "monadische" Operationen als Methoden definiert.
Diese rufen in Abhängigkeit vom Vorhandensein eines Wertes eine Funktion f
auf.
Im Ergebnis entsteht wiederum ein std::expected<_,_>
.
Dabei werden die Typen von R
und E
entsprechend angepasst.
Wert vorhanden? | ja | nein | Rückgabetyp von f |
---|---|---|---|
and_then(f) | f(value()) | std::expected<R2,E> |
|
or_else(f) | f(error()) | std::expected<R,E2> |
|
transform(f) | f(value()) | R2 |
|
transform_error(f) | f(error()) | E2 |
Siehe auch: <optional>, <variant>
kennen/include/expected.1730478084.txt.gz · Zuletzt geändert: 2024-11-01 17:21 von rrichter