Sto scrivendo una libreria in C++ che utilizza un'API C precedente. Il client della mia libreria può specificare funzioni di callback, che vengono chiamate indirettamente attraverso la mia libreria che viene chiamata attraverso l'API C. Ciò significa che tutte le eccezioni nei callback del client devono essere gestite.Passaggio di eccezioni attraverso un limite API C
La mia domanda è questa: come posso catturare l'eccezione su un lato del confine e rilanciarlo una volta che il limite dell'API C è stato riattraversato e l'esecuzione è tornata in C++ land in modo che l'eccezione possa essere gestita da codice cliente?
Se l'eccezione è generata dal valore, il parametro 'exception_ptr' lo manterrà attivo? –
@ SethCarnegie: Secondo lo standard, sì. (§18.8.5/8 "L'oggetto di riferimento deve rimanere valido almeno finché esiste un oggetto' exception_ptr' che si riferisce ad esso. ") L'implementazione Boost dovrebbe fare lo stesso. – kennytm
Questo è fantastico, sembra che il Comitato abbia progettato C++ 11 pensando a me. È anche per la ragione che VS2010 implementa 'exception_ptr',' current_exception' e 'rethrow_exception' che posso accettare questa risposta. Grazie. –