Отключить исключения в BOOST? - PullRequest
       9

Отключить исключения в BOOST?

3 голосов
/ 05 декабря 2009

Я хочу использовать boost :: asio, но не хочу, чтобы boost генерировал исключения, потому что в моей среде исключения не должны вызываться.

Я встречал BOOST_NO_EXCEPTIONS, но в документации говорится, что вызывающие функции throw_exception могут предполагать, что эта функция никогда не вернется. Но как пользовательская функция не может вернуться? Какую функцию замены мне нужно вставить сюда? Должен ли я завершить процесс в случае, если буст-код хочет выдать исключение?

Ответы [ 3 ]

9 голосов
/ 05 декабря 2009

Ну, что вы хотите сделать в случае ошибки? BOOST_NO_EXCEPTION волшебным образом не заставляет исходный код Boost использовать альтернативный механизм передачи ошибки обратно вызывающим абонентам. Таким образом, вы либо выводите ошибку в stderr и die, либо выполняете longjmp до самого верха - утечка любых ресурсов, которые функции, выделенные в данный момент в стеке вызовов, могли бы выделить.

4 голосов
/ 05 декабря 2009

Либо вы завершаете процесс, либо переходите к чему-то вроде глобального обработчика ошибок, используя longjmp, который вы ранее определили с помощью setjmp.

1 голос
/ 05 декабря 2009

Похоже, вы неправильно поняли значение BOOST_NO_EXCEPTIONS, оно дает вам шанс выручить только так, как вы хотите, последовательным образом.

Выполнение вошло в состояние, в котором оно больше не может продолжаться, то есть, когда выдается исключение, поэтому, если пользователь определил throw_exception, то логично думать, что поведение не определено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...