Tengo código C++ que usa algunas bibliotecas C. Las bibliotecas C toman devoluciones de llamadas en lenguaje C. Escribí una devolución de llamada en mi código C++ y ahora de alguna manera tengo que informar el error (pero se vuelve nulo). Me pregunto si puedo lanzar una excepción desde una devolución de llamada en C que se usa desde el código C++.¿Puedo arrojar excepciones de C++ de devoluciones de llamada de C heredadas?
Esto es muy difícil de entender para mí.
Gracias, Boda Cydo.
+1 buen punto, la biblioteca C podría asignar memoria, abrir un archivo o una conexión de red antes de llamar a la función de devolución de llamada. Si lanza una excepción allí, la biblioteca no se borrará después. – Ozan
Gracias por los consejos. Lo hice usar una variable global que se establece si se produjo un error. Todas las llamadas posteriores a esta función de devolución de llamada C simplemente vuelven y no hacen nada. Después de que la biblioteca finaliza con todas las llamadas C, y vuelvo a mi código C++, compruebo si se configuró esta variable global, y si fue así, informo de error. – bodacydo
Sus dos primeras declaraciones son mutuamente contradictorias. "Sí, deberías poder hacerlo". - Bien. "Sin embargo, tenga en cuenta que es muy probable que la biblioteca C no haya sido escrita para ser una excepción segura" - Oh, entonces la respuesta es, en realidad, no. Nunca arroje excepciones a través del código que no se sabe que es una excepción segura. – JeremyP