带c接口的c ++库

ale*_*una 11 c c++ linux

我需要用c ++编写一个库,客户端可以在远程服务器上执行某些操作.特定的唯一一件事我还没有完成:c ++库需要一个C接口.让我解释一下:从使用这个lib的客户端我需要调用类似于:int operation(void*addr); 如果int <0错误等等..但是库是c ++中的一个类.所以我的答案是..需要一个全局变量来保存库中的类实例吗?开发C++类的C接口是一些更好的选择吗?

感谢您的建议.

Mat*_*lia 16

您可以在C包装器中使用PIMPL惯用法.您提供了一个YourClass_Create内部调用构造函数(using new)的方法,并返回指向类实例的指针; 对于客户端代码,这将只是一个不透明的句柄(它可能是一个typedeffor void *),被传递给C接口的每个函数,以指定它必须工作的实例(就像FILE *stdio).

所有这些函数必须做的是调用句柄上的相应方法(转换回指向类的指针)并将异常转换为错误代码.


正如@ jdv-Jan de Vaan在他的评论中指出的那样,不要忘记围绕C包装器代码的必要#ifdef编辑extern "C" {},否则可能会出现链接器错误.