促进在现有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
的索引。
上面示例中的实际函数classname_methodname
只是从向量中获取对象,并使用其参数调用对象中的方法。
要创建对象实例,可以使用classname_create
或类似的命名函数,它创建一个新实例,然后返回用于其他函数的句柄。
您可以将C ++代码包装在C API中。
但是,它仍可能依赖于C ++库。 如果您的要求阻止使用C ++库,那么将现有代码包装在C API中对您没有帮助。
此任务很大程度上取决于您的边界条件。 其他海报定义了一种为C ++模块提供C接口的好方法。
如果您绝对需要将代码转换为纯C,但可维护性不是问题,您可能会考虑编译代码然后使用C反编译器生成乱码,将有效的C代码编译成C模块,在function上等同于C ++模块。