Вот моя проблема:
У меня есть два модуля C ++, A и B, которые построены как динамически связанные библиотеки.A предлагает основные математические функции и пользовательские типы исключений.B - это модуль более высокого уровня, который использует A.
B :: someFunction () вызывает функцию из A и пытается перехватить пользовательское исключение A: MyExceptionFromA, чтобы преобразовать его в пользовательский тип B: MyExceptionFromB (поскольку пользователям модуля B не нужно знать о деталях реализации A).
Все работает нормально, пока я остаюсь в домене C ++.Однако, если я раскрываю B :: someFunction () в python через boost python, исключение больше не перехватывается в модуле C ++.
Я могу поймать std :: runtime_error, из которого происходит A: MyExceptionFromA, ивызовите typeid (e) .name (), чтобы получить правильное искаженное имя, поэтому я знаю, что выдается правильное исключение.Поэтому я подозреваю, что проблема связана с разрешением этого искаженного символа в правильный тип исключения.
Я нашел эту ссылку , которая объясняет, что «python использует [островную] модель для открытия модулей расширения, так что разработчикам модулей расширения не нужно знать, какие символы других модулей расширенияможет использовать. "Я подозреваю, что это часть проблемы / решения, но я не знаю достаточно о разрешении символов, чтобы понять, как решить мою проблему.
Есть идеи?