-
- Исключения - это такой способ остановить выполнение
последовательности операций и подняться до уровня, где их начали
обрабатывать. К примеру запрос к СУБД - у вас там десяток
SELECT'ов, пять INSERT'ов и 4 REPLACE. Все в перемешку, разумеется.
Внезапно, у вас на 5ом запросе из 10 срабатывает нарушение
constraint. Вы кидаете исключение и остальное не обрабатываете.
catch блок откатывает БД к состоянию до запроса и замечательно
ругаемся на клиента за кривые данные. lloyd(245 знак., 06.11.2020 15:27)
- std::optional для этого более чем достаточно. - evgeniy1294(06.11.2020 16:06)
- О да. lloyd(159 знак., 06.11.2020 17:10)
- БД с их транзакциями к эксепшенам прямого отношения не имеют,
логика отдаленно похожая, реализация может быть очень отличающаяся.
Вот заметил все когда исключения хвалят примеры почему-то приводят
откуда угодно кроме эмбедеда. Можно адекватный пример пользы
эксепшенов в прошивке контроллера? - Kabdim(06.11.2020 15:37)
- Эксешпн в прошивке контроллера - это прерывание от Memory
Protection Unit, или некоррентый аргумент RTOS или отказ
накопителя. Для половины случаев можно перезапустить процесс, в
остальных - прыгнуть в failsafe режим. - lloyd(06.11.2020 17:09)
- "Эксешпн в прошивке контроллера - это " прерывание, которое в
терминах референс мануала назвали эксепшеном для того что отличить
от прерываний переферии. Отношений с эксепшенами в C++ о которых
речь в ветке тут нет. Остальные примеры - такие же. Ближе всего
конечно отказ накопителя, но скорее всего он у вас вряд ли
самописный и те бибилотеки которые мне известны экспешенов не
вызвают. Можно конечно изогнуться и в предложеных вариантах сделать
адаптер, который будет вызвать Kabdim(53 знак., 09.11.2020 12:27)
- "Почему С++ автоматом не подхватывает коды возврата С-шной либы в
исключение" - вы поняли, что за вопрос вообще задали? Разумеется,
эксепшены кидает С++ код, и только в том случае, когда он написан
таким образом. Суть в том, что сами исключения кидать в
эмбеддерском коде нужно не так часто. Вот если у вас гуй - вы
можете кидать исключения в setter-е свойства, выводя сообщение
ошибки сразу рядом с полем ввода. Можно делать обработку
nullptr-ов, но это скорее из области lloyd(9 знак., 09.11.2020 14:29)
- Этого вопроса я не задавал. Я пытаюсь понять где же вы их используете. Ваши примеры к эксепшенам в C++ отношения не имеют. Следующее предположение что вы лично у себя в прошивках пишите перевод этих ситуаций в эксепшены плюсов о чем и задан вам уточняющий вопрос. Потому что если вы этого не делаете вообще не ясно зачем вы привели эти примеры. Kabdim(247 знак., 09.11.2020 15:01)
- "Почему С++ автоматом не подхватывает коды возврата С-шной либы в
исключение" - вы поняли, что за вопрос вообще задали? Разумеется,
эксепшены кидает С++ код, и только в том случае, когда он написан
таким образом. Суть в том, что сами исключения кидать в
эмбеддерском коде нужно не так часто. Вот если у вас гуй - вы
можете кидать исключения в setter-е свойства, выводя сообщение
ошибки сразу рядом с полем ввода. Можно делать обработку
nullptr-ов, но это скорее из области lloyd(9 знак., 09.11.2020 14:29)
- "Эксешпн в прошивке контроллера - это " прерывание, которое в
терминах референс мануала назвали эксепшеном для того что отличить
от прерываний переферии. Отношений с эксепшенами в C++ о которых
речь в ветке тут нет. Остальные примеры - такие же. Ближе всего
конечно отказ накопителя, но скорее всего он у вас вряд ли
самописный и те бибилотеки которые мне известны экспешенов не
вызвают. Можно конечно изогнуться и в предложеных вариантах сделать
адаптер, который будет вызвать Kabdim(53 знак., 09.11.2020 12:27)
- Эксешпн в прошивке контроллера - это прерывание от Memory
Protection Unit, или некоррентый аргумент RTOS или отказ
накопителя. Для половины случаев можно перезапустить процесс, в
остальных - прыгнуть в failsafe режим. - lloyd(06.11.2020 17:09)
- std::optional для этого более чем достаточно. - evgeniy1294(06.11.2020 16:06)
- Исключения - это такой способ остановить выполнение
последовательности операций и подняться до уровня, где их начали
обрабатывать. К примеру запрос к СУБД - у вас там десяток
SELECT'ов, пять INSERT'ов и 4 REPLACE. Все в перемешку, разумеется.
Внезапно, у вас на 5ом запросе из 10 срабатывает нарушение
constraint. Вы кидаете исключение и остальное не обрабатываете.
catch блок откатывает БД к состоянию до запроса и замечательно
ругаемся на клиента за кривые данные. lloyd(245 знак., 06.11.2020 15:27)