gpt4 book ai didi

带有 C 接口(interface)的 C++ 库

转载 作者:IT王子 更新时间:2023-10-28 23:59:12 24 4
gpt4 key购买 nike

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

谢谢建议回答。

最佳答案

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

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


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

关于带有 C 接口(interface)的 C++ 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4978330/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com