如何在C代码中存储C++对象?

Els*_*lsa 4 c c++ types

我有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;
Run Code Online (Sandbox Code Playgroud)

我的问题:objectPtr使用的接受类型是什么?

Chr*_*ung 6

void.像这样:

typedef struct THESTRUCT {
    void* objectPtr;
} THESTRUCT;
Run Code Online (Sandbox Code Playgroud)

void*是一种"通用"指针类型.(你必须将它转换为其他类型才能使用它.由于没有类型将它强制转换为C端,因此它实际上是一个不透明的指针.)

另一种方法是为您的C++类型制作前向声明,而不定义它(因为在C端不可能这样做).因此,如果调用了C++类型,则foo可以执行以下操作:

struct foo;
typedef struct THESTRUCT {
    struct foo* objectPtr;
} THESTRUCT;
Run Code Online (Sandbox Code Playgroud)