促进在现有C实现中使用C ++

最近我被分配了一个任务来提供我的C ++代码的C实现。 由于原始代码很大,并且很大程度上依赖于C中不存在的结构,我想知道什么是最简单的传输方式。

我读过有些包装器允许在C中使用C ++? 这些是否允许我简单地在C中复制/粘贴代码?

另外,我探讨了以下http://attractivechaos.wordpress.com/2008/09/19/c-array-vs-c-vector/

你有没有关于如何在没有太多工作的情况下完成任务的建议(显然,因为代码已经编写,只需要“转移”)?

您可以编写一个包装器库,使用内部句柄来处理所使用的对象和类。 调用对象中的方法的函数可能如下所示:

extern "C" int classname_methodname(int handle, int param1); 

handle参数可以是vector internal_classname的索引。

上面示例中的实际函数classname_methodname只是从向量中获取对象,并使用其参数调用对象中的方法。

要创建对象实例,可以使用classname_create或类似的命名函数,它创建一个新实例,然后返回用于其他函数的句柄。

您可以将C ++代码包装在C API中。

但是,它仍可能依赖于C ++库。 如果您的要求阻止使用C ++库,那么将现有代码包装在C API中对您没有帮助。

此任务很大程度上取决于您的边界条件。 其他海报定义了一种为C ++模块提供C接口的好方法。

如果您绝对需要将代码转换为纯C,但可维护性不是问题,您可能会考虑编译代码然后使用C反编译器生成乱码,将有效的C代码编译成C模块,在function上等同于C ++模块。