从C调用C++代码

Vin*_*igi 21 c c++

有什么方法可以从C代码调用C++代码吗?

class a
{
  someFunction();
};
Run Code Online (Sandbox Code Playgroud)

如何someFunction()从C代码调用?换句话说,我在这里问如何避免名称损坏.

JUS*_*ION 13

  1. 首先,将C API包装器写入基于对象的库.例如,如果你有一个带有方法bar()的类Foo,在C++中你将它称为Foo.bar().在创建一个C接口时,你必须有一个(全局)函数栏,它带有一个指向Foo的指针(理想情况是以不透明度的void指针的形式).
  2. 为您在extern"C"中导出的C API包装DECLARATIONS.

(我不记得C++的所有该死的强制转换操作符并且懒得查找它,所以如果您喜欢以下代码,请用更具体的转换替换(Foo*).)

// My header file for the C API.
extern "C"
{
  void bar(void* fooInstance);
}

// My source file for the C API.
void bar(void* fooInstance)
{
  Foo* inst = (Foo*) fooInstance;
  inst->bar();
}
Run Code Online (Sandbox Code Playgroud)

  • 因为"实际类型"是C++构造并且没有(安全)C等价物. (8认同)
  • 为什么使用void*而不是实际类型?通过任何随机类型加上c风格演员似乎是一个灾难的食谱. (2认同)