Здравствуйте, T4r4sB, Вы писали:
TB>Кстати, а где в твоём примере разные коды ошибок?
В Result есть поле error
TB>Где немедленный возврат из функции в случае ошибки?
Такого нету, надо через if. Но можно намакросить, будет достаточно коротко
TB>Больше похоже на Optional.
Это он почти и есть, с некоторым дополнениями. Есть ещё Error, который почти как Result, но содержит только код ошибки. Наверно оно аналогично Result<void>, я уже не помню, нафига я его отдельно сделал. Error и Result умеют конвертироваться друг в друга. Есть ещё хитрый оператор !, точно не помню как работает, смотреть лень, он нужен для немного странной записи:
[сcode]
if (auto res = getResult())
{
// Делаем полезное с валидным результатом
}
if (auto res = !getResult())
{
// Результат не валиден
return Error(res);
}
[/сcode]
А в расте оператор ?, как я понял, проверяет на ошибку и делает return из текущей функции? Ну может и удобно, но как я понимаю, у всей иерархии тип результата одинаковый? Это не особо часто таки бывает. Или как оно работает?