用go + swig替换c ++

我最近问了这个问题https://softwareengineering.stackexchange.com/questions/129076/go-instead-of-cc-with-cgo,得到了一些非常有趣的输入。但是我的问题有一个错误:我认为cgo也可以用来访问c ++代码,但这是不可能的。相反,您需要使用SWIG。

go常见问题解答说:“ cgo程序提供了“外部函数接口”的机制,以允许从Go代码安全地调用C库。SWIG将此功能扩展到了C ++库。”

我的问题: 是否可以使用SWIG + Go访问高级Q ++框架(例如QT)并提高生产力?我想使用Go作为一种“脚本语言”来利用c ++库。

你有去围棋的经验吗?有我要注意的陷阱吗?

更新/回答:我也在IRC上问过这个问题,我认为问题已经解决了:

SWIG是连接其他语言的c ++代码的一种非常简洁的方法。可悲的是,将c ++的类型匹配到类似go的东西可能非常复杂,并且在大多数情况下,您必须自己指定映射。这意味着SWIG是利用现有代码库重用已经编写的算法的好方法。但是,映射像Qt这样的库要花很多时间。注意,这肯定是可能的,但您不想这样做。

那些使用go进行GUI编程的人可能想要尝试go-gtk或wxWidgets的go版本。


一只名叫tom的猫
浏览 263回答 2
2回答

翻过高山走不出你

是否可以?是的。能否在相当短的时间内完成?不。如果回头看一下采用大型框架并试图在其上放置抽象层的其他项目,您会发现大多数都是“不完整的”。您可能可以做一个相当不错的开始,并准备好一些初始包装器,但是通常情况下,即使要使用自动工具(尽管有很多帮助,但可以从来没有一个完整的解决方案)。然后...您会感到讨厌,剩下的10%会让您永远死掉(好吧,至少真的很长一段时间)。然后首先考虑它是如何改变的目标。例如,Qt将发布下一个主要重写。通常,坚持设计框架所用的框架语言是最安全的。尽管许多项目本身都具有语言扩展。例如,对于Qt,您应该签出QML,QML提供(以及许多其他功能)与Qt的javascript绑定。有点。但是它可能满足您的“脚本”要求。

皈依舞

有关此问题的相关更新:现在可以使用带有此CL的cgo与c ++进行交互,该CL已合并到Go 1.2中。但是,它仅限于类似C的函数调用,并且不支持类,方法和C ++好东西(但是,我希望如此)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go