我有调用 C++ 代码的 C 代码。 C++ 代码创建一个对象,然后将其传递回 C 代码,后者将对象存储在结构中:
extern "C" void cppFn(?** objectPtr)
{
*objectPtr = new Object();
}
void cFn()
{
THESTRUCT theStruct = {0};
cppFn(&(theStruct.objectPtr));
}
typedef struct THESTRUCT
{
?* objectPtr;
} THESTRUCT;
我的问题:objectPtr 可接受的类型是什么?
最佳答案
无效
。像这样:
typedef struct THESTRUCT {
void* objectPtr;
} THESTRUCT;
void*
是一种“通用”指针类型。 (您必须将其转换为其他类型才能使用它。由于在 C 端没有可将其转换为的类型,因此它实际上是一个不透明的指针。)
另一种方法是对 C++ 类型进行前向声明,而不对其进行定义(因为在 C 端不可能这样做)。因此,如果您的 C++ 类型称为 foo
,您可以:
struct foo;
typedef struct THESTRUCT {
struct foo* objectPtr;
} THESTRUCT;
关于c++ - 如何在 C 代码中存储 C++ 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5752720/