Класс expected
Класс expected представляет собой тип-обертку,
который может хранить либо значение ожидаемого типа,
либо объект ошибки. Он удобен для функций, которые
могут завершиться неудачей. Первым параметром шаблона
задается тип ожидаемого значения, а вторым - тип ошибки.
Синтаксис
std::expected<T, E> variable;
Пример
Давайте создадим объект expected со значением
42 и проверим его состояние с помощью метода
has_value:
#include <iostream>
#include <expected>
using namespace std;
int main()
{
expected<int, string> res = 42;
if (res.has_value()) {
cout << "value: " << res.value() << endl;
} else {
cout << "error: " << res.error() << endl;
}
return 0;
}
Результат выполнения кода:
"value: 42"
Пример
Давайте создадим объект expected с ошибкой
"not found" и выведем сообщение об ошибке:
#include <iostream>
#include <expected>
using namespace std;
int main()
{
expected<int, string> res = unexpected("not found");
if (res.has_value()) {
cout << "value: " << res.value() << endl;
} else {
cout << "error: " << res.error() << endl;
}
return 0;
}
Результат выполнения кода:
"error: not found"
Пример
Давайте воспользуемся методом value_or,
который возвращает значение, если оно есть,
или заданное значение по умолчанию:
#include <iostream>
#include <expected>
using namespace std;
int main()
{
expected<int, string> res1 = 42;
expected<int, string> res2 = unexpected("not found");
cout << res1.value_or(0) << endl;
cout << res2.value_or(0) << endl;
return 0;
}
Результат выполнения кода:
42
0