Вы можете использовать идиому PIMPL в оболочке C. Вы предоставляете метод YourClass_Create
, который внутренне вызывает конструктор (используя new
) и возвращает указатель на экземпляр вашего класса; для клиентского кода это будет просто непрозрачный дескриптор (это может быть typedef
для void *
), который будет передан каждой функции вашего интерфейса C, чтобы указать, с каким экземпляром он должен работать (как FILE *
). в stdio
).
Все эти функции должны будут вызвать соответствующий метод на дескрипторе (преобразованный обратно в указатель на ваш класс) и преобразовать исключения в коды ошибок.
<ч />
Как отметил @ jdv-Jan de Vaan в своем комментарии, не забывайте необходимые #ifdef
ed extern "C" {}
вокруг кода оболочки C, иначе вы можете получить ошибки компоновщика.