gpt4 book ai didi

C++ 从 void* 转换为 SomeClass*

转载 作者:行者123 更新时间:2023-11-28 03:43:50 26 4
gpt4 key购买 nike

我正在开发一个 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 程序中(类似于 DBus C 移植,可以与 C 风格或 C++ 风格一起使用)。所以我会做这样的事情:

int MyClassAddInts(void *instance, int a, int b) {
MyClass *_instance = static_cast<MyClass*>(instance);
return _instance->addInts(a, b);
}

请记住,这只是一个虚拟示例。

非常感谢。

最佳答案

不是真的。通过 C 接口(interface)的全部要点是您剥离了对任何 C++ ABI 的所有依赖,因此您无法通过它以“自然”方式保留类型信息。

如果它对您来说真的很重要,您可以装配一些复杂的元数据基础设施以允许进行一些运行时测试,但您肯定不会得到编译时类型-安全。

关于C++ 从 void* 转换为 SomeClass*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8312047/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com