来自C的C++代码和对象?

Ant*_*kov 7 c c++ lisp

有没有一种简单的方法直接从C使用C++对象?我想将一些类从C++暴露给C或FFI(外部函数接口).当然,我可以写一些这样的东西:

class Foo{
....
};

void *make_foo(...){
Foo *ptr = new Foo(..)

return static_cast<void *>(ptr);
}

..

int *foo_method1(void *fooptr, ...){
Foo *ptr = static_cast<Foo*>(fooptr);
}
Run Code Online (Sandbox Code Playgroud)

但是有一种更简单的方法吗?

Ree*_*sey 8

一般来说,这是最简单的方法.

还要记住,您还需要extern "C"在所有C"包装器"方法上使用它们.


edu*_*ffy 7

你快到了.使用独立函数前缀extern "C"来关闭C++编译器的名称修改.

例如:

extern "C" void *make_foo(...){
  Foo *ptr = new Foo(..)

  return static_cast<void *>(ptr);
}
Run Code Online (Sandbox Code Playgroud)