我正在开发一个 C++ 库,该库将作为插件在 C++ 和 C 程序中动态加载(dlopen、dlsym ...)。
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
...)
这很重要,因为我打算为每个 MyClass 方法创建一个 C 包装器。这将允许我将此库加载到 C 程序中(类似于可以与 C 风格或 C++ 风格一起使用的 DBus C 移植)。所以我会做这样的事情:
int MyClassAddInts(void *instance, int a, int b) {
MyClass *_instance = static_cast<MyClass*>(instance);
return _instance->addInts(a, b);
}
请记住,这只是一个虚拟示例。
非常感谢。