C++ 为C+编写C包装器+;图书馆?

C++ 为C+编写C包装器+;图书馆?,c++,c,api,cross-platform,standards,C++,C,Api,Cross Platform,Standards,C++11具有的睡眠功能。但C标准没有同等标准 我想我可以编写一个包装器来调用C++中的C++函数。 还有一些有用的库,比如boostfilesystem和Asio。这些比较复杂,但我也可以编写包装器 它可能是在重新发明轮子吗?这可能是个坏主意吗?这其中的一个问题是,如果您想编写调用Boost函数的C包装器,那么在抛出异常时该怎么办?基本上,在它到达C之前,您必须在调用者中吞下它,但是要正确地将它报告给C有点尴尬,并且存在很多类型的异常 通常人们使用C代替C++,当他们特别想要额外的移植性时,或

C++11具有的睡眠功能。但C标准没有同等标准

我想我可以编写一个包装器来调用C++中的C++函数。 还有一些有用的库,比如boostfilesystem和Asio。这些比较复杂,但我也可以编写包装器


它可能是在重新发明轮子吗?这可能是个坏主意吗?

这其中的一个问题是,如果您想编写调用Boost函数的C包装器,那么在抛出异常时该怎么办?基本上,在它到达C之前,您必须在调用者中吞下它,但是要正确地将它报告给C有点尴尬,并且存在很多类型的异常


<>通常人们使用C代替C++,当他们特别想要额外的移植性时,或者由于某种原因不能提供所有的C++依赖。如果你想编写一个使用Booo::文件系统的C程序,为什么不把它编译成C++?要编写的异常处理模板代码会少得多,出错的可能性也会小得多。

问题是,如果要编写调用Boost函数的C包装器,如果抛出异常怎么办?基本上,在它到达C之前,您必须在调用者中吞下它,但是要正确地将它报告给C有点尴尬,并且存在很多类型的异常


<>通常人们使用C代替C++,当他们特别想要额外的移植性时,或者由于某种原因不能提供所有的C++依赖。如果你想编写一个使用Booo::文件系统的C程序,为什么不把它编译成C++?要编写的异常处理锅炉板代码会少很多,出错的可能性也会少很多。

zeroMQ就是这样做的。库是用C++编写的,但是库API是C接口。原则上,可以在对象大小的内存块中隐藏类,并传递
void*
。对于一些简单的函数,例如的
sleep\u,您只需创建一个包装函数即可。在标题中,声明

extern "C" {void sleep_for(int duration);}
在cpp文件中,根据
std::this\u thread::sleep\u for
实现这一点

sleep_for(int duration) {std::this_thread::sleep_for( std::chrono::milliseconds(duration);}
对于类,您需要使用C函数来创建一个新对象,销毁它,当然还需要调用成员函数。对于a类,这可能如下所示:

C头文件“A_C_API.h”:


您必须捕获异常并将其转换为一些C错误处理。您还必须处理某些平台上的对齐问题,特别是SPARK平台。为了简单起见,我省略了这一点,但是您可以看看zeromq头如何做到这一点。

zeromq就是这样做的。库是用C++编写的,但是库API是C接口。原则上,可以在对象大小的内存块中隐藏类,并传递
void*
。对于一些简单的函数,例如
sleep\u,您只需创建一个包装函数即可。在标题中,声明

extern "C" {void sleep_for(int duration);}
在cpp文件中,根据
std::this\u thread::sleep\u for
实现这一点

sleep_for(int duration) {std::this_thread::sleep_for( std::chrono::milliseconds(duration);}
对于类,您需要使用C函数来创建一个新对象,销毁它,当然还需要调用成员函数。对于a类,这可能如下所示:

C头文件“A_C_API.h”:


您必须捕获异常并将其转换为一些C错误处理。您还必须处理某些平台上的对齐问题,特别是SPARK平台。为了简单起见,我省略了这一点,但您可以看看zeromq头如何做到这一点。

是的,将异常转换为代码既不优雅也不方便。我想我将使用包装器当我已经有很多C代码和一些简单的C++函数正是我需要的。是的,将异常转换成代码是不优雅和不方便的。我想我会使用包装器当我已经有很多C代码和一些简单的C++函数正是我需要的。