2009-12-05 2 views
2

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

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

+0

Я думаю, что все функции повышения ASIO, которые могут вызывать, обеспечивают перегрузку, которая явно не бросает (ошибки ASIO). Эти перегрузки требуют, чтобы вы проходили объект boost :: system :: error_code. – Dan

ответ

4

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

1

Вы, кажется, неправильно поняли значение BOOST_NO_EXCEPTIONS, это дает вам возможность спасти вас так, как вы этого хотите.

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

9

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

Смежные вопросы