关于将C ++类导出到C的问题

时间:2011-06-10 11:51:08

标签: c++ c

我一直在阅读有关导出C ++类的信息,以便C可以使用它。我从Parashift那里听了这个好example,然后出了一个问题。

为了保存分配给C ++类的内存,我们定义了以下结构

typedef struct A A;

这样A*可以指向类A的地址。我的问题是:这个指针的类型是否重要?例如,我们不能输入类似的东西:

typedef double A;

因为它可能是负责分配和释放内存的C ++代码。

3 个答案:

答案 0 :(得分:4)

不,你不应该使用void*。指向不完整类型struct A的指针是一种更好的技术。这可以避免意外地将指针混合到不同的不透明类型。如果你typedefvoid,你可以将opaque类型的指针分配给任何其他数据指针。可能不是你想要的。

使用不完整的类型可以为您提供一些类型的安全性,完全免费。

答案 1 :(得分:2)

不透明指针最好声明为void*

这通常称为Pimpl idiom

答案 2 :(得分:1)

您应该将void类型用于任何意图不透明的内容。使用未定义结构的typedef是可以的,因为它的名称可以让你了解它真正指向的内容。