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