为了账号安全,请及时绑定邮箱和手机立即绑定

用go + swig替换c ++

用go + swig替换c ++

Go
一只名叫tom的猫 2021-04-29 14:11:43
我最近问了这个问题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版本。
查看完整描述

2 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

是否可以?是的。

能否在相当短的时间内完成?不。

如果回头看一下采用大型框架并试图在其上放置抽象层的其他项目,您会发现大多数都是“不完整的”。您可能可以做一个相当不错的开始,并准备好一些初始包装器,但是通常情况下,即使要使用自动工具(尽管有很多帮助,但可以从来没有一个完整的解决方案)。然后...您会感到讨厌,剩下的10%会让您永远死掉(好吧,至少真的很长一段时间)。然后首先考虑它是如何改变的目标。例如,Qt将发布下一个主要重写。

通常,坚持设计框架所用的框架语言是最安全的。尽管许多项目本身都具有语言扩展。例如,对于Qt,您应该签出QML,QML提供(以及许多其他功能)与Qt的javascript绑定。有点。但是它可能满足您的“脚本”要求。


查看完整回答
反对 回复 2021-05-10
?
皈依舞

TA贡献1851条经验 获得超3个赞

有关此问题的相关更新:现在可以使用带有此CL的cgo与c ++进行交互,该CL已合并到Go 1.2中。但是,它仅限于类似C的函数调用,并且不支持类,方法和C ++好东西(但是,我希望如此)。


查看完整回答
反对 回复 2021-05-10
  • 2 回答
  • 0 关注
  • 262 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信