Re[6]: Почему boost::lexical_cast при неудаче всегда выбрасывает ис
От: zaufi Земля  
Дата: 29.12.15 08:48
Оценка:
Здравствуйте, 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, если бы это реально было кому-то нужно, это бы уже было... (уверен уже есть в какойнить библе)
Re[7]: Почему boost::lexical_cast при неудаче всегда выбрасывает ис
От: Хон Гиль Дон Россия  
Дата: 29.12.15 08:55
Оценка:
Здравствуйте, zaufi, Вы писали:

Z>пожайлуста не смешите мои тапки... %) там где нужна производительность boost::lexical_cast и близко нету... ниша boost::lexical_cast это скорее удобство в разработке, но никак не производительность!


Для чисел его давно разогнали, когда я последний раз проверял (пару лет назад), по скорости он не сильно отличался от sprintf и стрим внутри при конверсии число-строка ЕМНИП не использовался.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[4]: Почему boost::lexical_cast при неудаче всегда выбрасывает ис
От: Хон Гиль Дон Россия  
Дата: 29.12.15 09:03
Оценка:
Здравствуйте, 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 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.