Я работаю над библиотекой C ++, которая будет динамически загружаться (dlopen, dlsym ...) в программах на C ++ и C в качестве плагина.
Программы на C ++ будут использовать функции создателя и разрушителя из библиотеки для вызова конструктора и деструктора соответственно. Примерно так:
void *creator(void *instance) {
return new MyClass();
}
void destroyer(void *instance) {
MyClass *_instance = static_cast<MyClass*>(instance);
delete _instance;
}
Проблема в том, что этот тип не безопасен.
Возможно ли быть безопасным здесь? (static_cast
, dynamic_cast
, reinterpret_cast
...)
Это важно, поскольку я намереваюсь создать оболочку C для каждого метода MyClass. Это позволило бы мне загрузить эту библиотеку в C-программу (что-то вроде переноса DBus C, которое можно использовать со стилем C или стилем C ++).
Поэтому я бы сделал что-то вроде этого:
int MyClassAddInts(void *instance, int a, int b) {
MyClass *_instance = static_cast<MyClass*>(instance);
return _instance->addInts(a, b);
}
Пожалуйста, имейте в виду, что это всего лишь фиктивный пример.
Большое спасибо.