Могу ли я выбросить исключения C ++ из устаревших обратных вызовов C? - PullRequest
9 голосов
/ 05 июля 2010

У меня есть код C ++, который использует некоторые библиотеки C. Библиотеки C принимают обратные вызовы языка C. Я написал обратный вызов в моем коде C ++, и теперь мне как-то нужно сообщить об ошибке (но он возвращает void) Интересно, могу ли я сгенерировать исключение из обратного вызова C, которое используется из кода C ++?

Мне очень трудно это понять.

Спасибо, Бода Цидо.

Ответы [ 2 ]

9 голосов
/ 05 июля 2010

Да, вы должны быть в состоянии сделать это. Однако имейте в виду, что вполне вероятно, что библиотека C была написана не для безопасности исключений, и в результате вы можете оставить некоторые структуры этой библиотеки в каком-то несовместимом состоянии. Это полностью зависит от конкретной библиотеки и от конкретной функции обратного вызова. Если бы не что иное, эту библиотеку, вероятно, нужно было бы написать с учетом поддержки C ++ с самого начала в отношении этого обратного вызова.

1 голос
/ 05 июля 2010

Да, вы можете выбросить исключение из вашей функции C ++. Однако он может быть перехвачен только кодом C ++, поэтому он не будет обрабатываться в устаревшей библиотеке.

...