You can use the PIMPL idiom in the C wrapper. You provide a method YourClass_Create
that internally calls the constructor (using new
) and returns the pointer to your class instance; for the client code this will be just an opaque handle (it may be a typedef
for void *
), to be passed to every function of your C interface to specify on which instance it has to work (just like FILE *
in stdio
).
All these functions will have to do is to call the corresponding method on the handle (converted back to a pointer to your class) and translate exceptions to error codes.
As @jdv-Jan de Vaan pointed out in his comment, don't forget the necessary #ifdef
ed extern "C" {}
around your C wrapper code, otherwise you may get linker errors.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…