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

标签 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;

我的问题: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/

相关文章:

c - (int)在C编程中是什么意思

c++ - 异常处理的顺序重要吗?

具有相同键类型和不同项目类型的c++映射

c++ - 为什么 syslog 有两个不同的函数声明?

c++ - 错误 : 'this' is not a constant expression

c++ - 如何创建一个不能被其他类继承的类?

c# - 在c#中获取任意类型数组的函数

c++ - C++ 中的条件运算符 "?:"

c - 如何使用 "foreign function interface"从 Go 调用 C

Java 调用由 GCC 编译的 C 库有效,但在使用 G++ 编译时失败