Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
C++ exceptions. Best practices.
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyWhite OwlА как быть с информационными сообщениями? Тот же SQL_SUCCESS_WITH_INFO если ты делаешь враппер для ODBC? Делать такие возвраты как исключения или как коды возврата в дополнение к исключениям которые будут перекрывать SQL_ERROR? Ни то ни другое. Вот эти инфо - это данные, один из результатов работы функции, а не код ошибки. Поэтому должен быть предусмотрен АПИ для доступа к этому результату, специально разработанный для удобства пользования им, т.е. ответ зависит от того для чего нужно получать эту инфу и можно ли ее игнорировать вообще.Ну положим что мы хотим получить наиболее удобный враппер. Твое решение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 20:33 |
|
||
|
C++ exceptions. Best practices.
|
|||
|---|---|---|---|
|
#18+
White OwlНу положим что мы хотим получить наиболее удобный враппер. Твое решение? Вот тут я уже приводил пример 17179189 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2015, 01:27 |
|
||
|
C++ exceptions. Best practices.
|
|||
|---|---|---|---|
|
#18+
White Owl MasterZivКоды возврата же накладывают два дополнительных ограничения: каждая функция должна принимать дополнительный параметр для возврата кода ошибки или должна не быть функцией (возвращаемое значение будет кодом возврата). Это не обязательно. Вспомни хоть о libc с его errno и WinAPI с GetLastError(). . Это ж знаменитые классыческие антипаттерны, завещаные нам прямо таки классиками. Надеюсь, ты не будешь рекомендовать людям так проектировать библиотеки. White OwlMasterZiv после вызова каждой функции надо проверять код возврата. При каскадном вызове функций -- при каждом вложенном вызове. Это тоже не обязательно. Очень часто функция может возвращать много информационных кодов которые можно игнорировать. Да и часто бывает что несколько родственных функций запускается подряд и падение второй функции в цепочке невозможно если отработала первая. Как пример fopen()-fread(), если мы файл сумели открыть, мы всегда сумеем его прочитать (уже другое дело сколько именно байт мы прочитаем), но fread() упасть просто не сможет. Во всех этих случаях, коды возврата можно запросто игнорировать. А при работе с исключениями эта проверка будет всегда, ее компилятор насильно в твой код впихнет. . Ты постоянно приводишь исключения из правил, и на их основании пытаешься доказать, что правила не действуют. Нельзя что -то так доказать или опровергнуть, мы должны находится в рамках фиксированной модели поведения функций. В данном случае мы должны предполагать, что каждая функция может завершиться нормально, или аварийно (не сделать то, что ей предписано сделать), и сигнализирует об этом либо кодом возврата, либо исключением. Если функция не завершается аварийно, то очевидно, что и говорить не о чем -- не будет либо исключений, либо кодов возврата. White OwlУгу. А как быть с информационными сообщениями? Тот же SQL_SUCCESS_WITH_INFO если ты делаешь враппер для ODBC? Делать такие возвраты как исключения или как коды возврата в дополнение к исключениям которые будут перекрывать SQL_ERROR? И перевирая твои слова: Ну очевидно же, что кода возврата более гибкие. Я объяснял, как надо поступать с диагностикой из ODBC и подобных библиотек. (в отдельной теме было) Это не исключения и не коды возврата, это дополнительный поток данных с диагностикой из источника данных. Иногда эти данные означают, что операция завершилась аварийно, тогда, только в этих случаях нужно генерировать исключение или плохой код возврата. Итого, тут нет доводов ни за исключения, ни против. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 00:30 |
|
||
|
C++ exceptions. Best practices.
|
|||
|---|---|---|---|
|
#18+
Владимир20122787Хотел бы поделиться своим подходом ... Конечно он не идеален, но много упрощает анализ результата выполнения функции. Над всеми libraries, которые использую создаю wrapper classes. Зачем? Их назначение одно - они инкапсулируют обработку результата выполнения функции. В результате анализ результата выполнения функции сводится к анализу member m_Ok. Если он не имеет значения TRUE, то анализируем значение m_LastErrorCode Вредный подход. Ты мог бы писать такие врапера (функции, не классы), обрабатывать исключительные случаи, и выбрасывать исключения в нужных местах, где уже сохранять и код возврата, и причину ошибки. Вот это было бы по-C++-ному. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 00:33 |
|
||
|
C++ exceptions. Best practices.
|
|||
|---|---|---|---|
|
#18+
MasterZivВредный подход. Ты мог бы писать такие врапера (функции, не классы), обрабатывать исключительные случаи, и выбрасывать исключения в нужных местах, где уже сохранять и код возврата, и причину ошибки. Вот это было бы по-C++-ному. Кто нам мешает все это сделать в wrapper при вызове функции и затем произвести анализ на наличие ошибки или исключения в месте вызова этой функции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 09:25 |
|
||
|
C++ exceptions. Best practices.
|
|||
|---|---|---|---|
|
#18+
Владимир2012MasterZivВредный подход. Ты мог бы писать такие врапера (функции, не классы), обрабатывать исключительные случаи, и выбрасывать исключения в нужных местах, где уже сохранять и код возврата, и причину ошибки. Вот это было бы по-C++-ному. Кто нам мешает все это сделать в wrapper при вызове функции и затем произвести анализ на наличие ошибки или исключения в месте вызова этой функции? Как я подозреваю ты так и делал. Но это неправильно, исключения для того и придумали, чтобы не проверять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 09:49 |
|
||
|
C++ exceptions. Best practices.
|
|||
|---|---|---|---|
|
#18+
Почитал про исключения в Go Language. http://golang.org/doc/faq#exceptions Why does Go not have exceptions? We believe that coupling exceptions to a control structure, as in the try-catch-finally idiom, results in convoluted code. It also tends to encourage programmers to label too many ordinary errors, such as failing to open a file, as exceptional. Go takes a different approach. For plain error handling, Go's multi-value returns make it easy to report an error without overloading the return value. A canonical error type, coupled with Go's other features, makes error handling pleasant but quite different from that in other languages. Go also has a couple of built-in functions to signal and recover from truly exceptional conditions. The recovery mechanism is executed only as part of a function's state being torn down after an error, which is sufficient to handle catastrophe but requires no extra control structures and, when used well, can result in clean error-handling code. See the Defer, Panic, and Recover article for details. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 19:33 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38869064&tid=2019127]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 150ms |

| 0 / 0 |
