Здравствуйте, RedApe, Вы писали:
RA>Здравствуйте, zaufi, Вы писали:
Z>>да, нужно испольовать try/catch! и какая с этим проблема?
RA>Он уродлив. И в данном месте он "естетически" не подходит.
RA>Все равно как если бы std::shared_ptr не содержал бы оператора проверки на отсутствие и всегда приходилось бы вместо
RA>RA>std::shared_ptr<A> a = get_pointer_that_can_be_null();
RA>if (a)
RA>{
a->>use_value();
RA>}
RA>
RA>Писать так
RA>RA>std::shared_ptr<A> a = get_pointer_that_can_be_null();
RA>try
RA>{
a->>use_value();
RA>} catch(std::bad_shared_ptr&)
RA>{ // do nothing
RA>}
RA>
RA>Согласись, что второй вариант уродлив. Зачем мне пытаться использовать возможно-некорректное-значение и сразу же на месте ловить исключение и игнорировать его?
какое-то противоречие в этом предложении... с одной стороны естественное нежелание использовать некорректное значение, с другой стороны склонность к игнорированию исключений (до добра не доведет)...
КМК, попытка игнорирования исключений уже какбы намекает что что-то не то в выбранном дизайне или используемых технологиях...
RA>В lexical_cast блок try/catch навязывается как плохая замена if/else.
что мешает написать свой lexical_cast возвращающий boost::optional<T> (и может быть засабмитить в буст)?? -- и никто не будет ничего навязывать...
IMHO, если бы это реально было кому-то нужно, это бы уже было... (уверен уже есть в какойнить библе)
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, RedApe, Вы писали:
RA>Даже при уровне программы Hello World, запросить у пользователя число и то уже проблема. Нужно либо использовать отлов исключений либо С функции либо в 2015 году писать свою реализацию функции для подобных вещей. Все таки C++ иногда сильно раздражает
Или использовать boost::spirit::qi::parse. Никто ж не заставляет писать грамматику, в спирите примитивы для разбора чисел вполне годные.
Как-то так
std::string str = "13";
unsigned int i;
if (!boost::spirit::qi::parse(str.cbegin(), str.cend(), boost::spirit::qi::uint_, i))
throw std::runtime_error(u8"все равно кину исключение");
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.