m
Size: a a a
m
O
m
ГH
ПК
O
4.2. Proliferation of "two-API" libraries
есть ещё одна мысль — мы, будучи авторами библиотеки, можем предоставить пользователю оба способа обработки наших ошибок, вот строка из примера:fs::resize_file(p, 1000).or_throw();Т.е. сделав интерфейс библиотеки монадическим, мы можем обеспечить пользователю оба возможных инструмента, а наоборот я себе этого не представляю.
m
4.2. Proliferation of "two-API" libraries
есть ещё одна мысль — мы, будучи авторами библиотеки, можем предоставить пользователю оба способа обработки наших ошибок, вот строка из примера:fs::resize_file(p, 1000).or_throw();Т.е. сделав интерфейс библиотеки монадическим, мы можем обеспечить пользователю оба возможных инструмента, а наоборот я себе этого не представляю.
try { return fs::resize_file(p, 1000); } catch(...) { return error; }
. Проблема в том, что в обоих подходах будут расходы на конвертацию. Но да, публичные интерфейсы это боль в плане обработки ошибок.O
try { return fs::resize_file(p, 1000); } catch(...) { return error; }
. Проблема в том, что в обоих подходах будут расходы на конвертацию. Но да, публичные интерфейсы это боль в плане обработки ошибок.m
template <class F, class T, class E, class >То что код некрасивый, я согласен. И я считаю, что необходимость преобразовывать exception в expected это ошибка проектирования библиотеки. На мой взгляд есть два варианта решения:
std::expected<T, E> to_expected(F&& f) {
try { return f(); }
catch(const E& e) { return {e}; }
}
to_expected([]{ fs::resize_file(p, 1000); });
get_free_space
)ПК
template <class F, class T, class E, class >То что код некрасивый, я согласен. И я считаю, что необходимость преобразовывать exception в expected это ошибка проектирования библиотеки. На мой взгляд есть два варианта решения:
std::expected<T, E> to_expected(F&& f) {
try { return f(); }
catch(const E& e) { return {e}; }
}
to_expected([]{ fs::resize_file(p, 1000); });
get_free_space
)AD
O
D
AD
AD
O
structured binding
:std::pair<int, int> divide(int a, int b);
// ...
auto [x, y] = divide(42, 0);
AD
O