![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Better Error DetectionBoost , Chapter 1. Boost.Convert 2.0 , Chapter 1. Boost.Convert 2.0
|
![]() | Note |
---|---|
Одним из заметных преимуществ< |
С точки зрения пользователя,<boost::lexical_cast
>обрабатывает сбой несколько одномерным необоротным способом.<boost::convert
>Более гибкий подход. Он предоставляет выбор и оставляет решение пользователю. Не исключено, что на библиотечном уровне единственным доступным вариантом может быть распространение исключения из-за отказа от конверсии. На уровне приложений, хотя, по моему личному опыту, выбор в подавляющем большинстве случаев заключался в том, чтобы обрабатывать сбои конверсиилокально, то есть избегать распространения исключений с отказом конверсии или, что еще лучше, вообще избегать исключений с программными потоками, подобными:
boost::optional<int> res = boost::convert<int>(str, cnv); if (!res) log("str conversion failed!"); int i1 = res.value_or(fallback_value); // ...proceed
и
struct fallback_func { int operator()() const { log("Failed to convert"); return 42; } };
// Fallback function is called when failed int i2 = convert<int>(str, cnv).value_or_eval(fallback_func()); int i3 = convert<int>(str, cnv, fallback_func()); // Same as above. Alternative API.
Статья Better Error Detection раздела Chapter 1. Boost.Convert 2.0 Chapter 1. Boost.Convert 2.0 может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Chapter 1. Boost.Convert 2.0 ::
реклама |