用于C++的C包装器

Ped*_*dro 16 c c++ wrapper puredata

我想将Pure Data用作我自己库的原型工具.我发现Pure Data补丁是用C语言编写的,但我的库是用C++编写的.那么如何在纯数据中使用此代码呢?由于我没有使用普通的C,我想知道如何编写C++类的C包装器以及如何实例化我的类呢?或者我必须重写C中的所有内容?

Dar*_*con 25

您需要为每个需要调用的函数编写包装函数.例如:

// The C++ implementation
class SomeObj { void func(int); };

extern "C" {
  SomeObj* newSomeObj() {return new SomeObj();}
  void freeSomeObj(SomeObj* obj) {delete obj;}
  void SomeObj_func(SomeObj* obj, int param) {obj->func(param)}
}

// The C interface
typedef struct SomeObjHandle SomeObj;

SomeObj* newSomeObj();
void freeSomeObj(SomeObj* obj);
void SomeObj_func(SomeObj* obj, int param);
Run Code Online (Sandbox Code Playgroud)

请注意,这必须是C++代码.在extern "C"该函数使用C命名约定指定.

  • 而不是使用`void*`,你应该使用不完整的结构来获得某种类型的安全性. (6认同)
  • 包装器也应该"吃异常"并将它们转换为返回代码. (3认同)
  • 通常,“extern C”与“#ifdef __cplusplus”配对。请参阅此链接:http://dsc.sun.com/solaris/articles/mixing.html (2认同)