我正在编写一些库,我希望它们可以在C和C ++中使用,然后用swig包装它们以使它们可用于Ruby,Python,Java,Lisp,...
用C语言编写库然后用C ++包装库而不是用C ++编写它然后将它包装在C中有什么优点和缺点?
我唯一能想到的就是如果库是用C ++编写的,那么C程序可能需要编译一个C ++编译器,不过我可能不会就此
可能还有一些功能或事物无法包装。
我主要是要求经验,知道在做这个项目时可能会遇到什么。
答案 0 :(得分:1)
C是一种更易于使用的语言,因为它是一种更简单的语言,大多数环境/操作系统都是用C语言编写的。
实际上,如果你遵循一些约定(" ABI"),大多数语言提供了一种调用C DLL / .so而无需任何包装的方法。它在很大程度上是丑陋的,但适用于更简单的接口,原型等。
与C的接口并不像馅饼那么简单,所以如果你不小心可能会遇到麻烦。例如,在Windows上,要从DLL导出函数,您必须将其标记为“#34;导出"”,它只有一个"事实上的"标准的做事方式。还有struct alignment,enum size(s)和其他问题。
从C接口C ++比反之亦然。你必须确保你的例外不会从C ++传播,正确地#34;翻译" C ++模板(记住std :: string是一个模板),接口中的各种继承习语(接口,混合,"常规"多重继承......)......
我已经完成了两项工作,我的经验表明你应该用最适合你手头任务的语言编写模块。当你完成后,与另一个接口然后包装到其他所有部分。实际上,没有人阻止你从一种语言(比如Ruby)包装C接口和从另一种语言包装c ++(比如Python,使用Cython)。
C和C ++之间的接口比将它们与(几乎所有)其他语言连接起来更容易,因此在决定主要开发语言时不应该是非常重要的影响。