replace c++ with go + swig
replace c++ with go + swig
我最近问了这个问题https://softwareengineering.stackexchange.com/questions/129076/go-instead-of-c-c-with-cgo并得到了一些非常有趣的意见。然而,我的问题中有一个错误:我认为cgo也可以用于访问c++代码,但这是不可能的。相反,您需要使用SWIG。
go-faq说:"cgo程序提供了一个"外部函数接口"的机制,允许从go代码中安全调用C库。SWIG将这一功能扩展到C++库。"
我的问题:是否可以使用SWIG+Go访问高级c++框架(如QT)并提高效率?我想使用Go作为一种"脚本语言"来利用c++库。
你有围棋和swig的经验吗?有没有我必须意识到的陷阱?
更新/回答:我也在IRC上问过这个问题,我认为问题已经解决了:
SWIG是一种与其他语言的c++代码接口的非常干净的方式。遗憾的是,将c++的类型与go之类的东西进行匹配可能非常复杂,在大多数情况下,您必须自己指定映射。这意味着SWIG是利用现有代码库重用已经编写的算法的好方法。然而,绘制像Qt这样的库会花费你很长时间。请注意,这肯定是可能的,但你不想这么做。
那些来这里使用go进行gui编程的人可能想要尝试go-gtk或wxWidgets的go版本。
有可能吗?对
能在相当短的时间内完成吗?编号
如果你回头看看其他采用大型框架并试图在其上添加抽象层的项目,你会发现大多数都是"不完整的"。你可能会有一个相当好的开始,并准备好一些初始的包装器,但通常情况下,当有很多底层代码需要包装时,即使是解决简单案例的工作也需要时间,即使是使用自动化工具(这很有帮助,但从来都不是一个完整的解决方案)。然后。。。你会得到剩下的10%,这将永远带你走(好吧,至少真的很长一段时间)。然后想想它最初是如何成为一个不断变化的目标的。例如,Qt即将发布下一个主要的重写版本。
一般来说,最安全的做法是坚持使用框架的设计语言。尽管许多项目本身都有语言扩展。例如,对于Qt,您应该查看QML,它提供了一个与Qt绑定的javascript。有点。但它可能满足您的"脚本"需求。
关于这个问题的相关更新:现在可以使用带有这个CL的cgo与C++进行交互,这个CL已为Go 1.2合并。然而,它仅限于类似C的函数调用,并且不支持类、方法和C++好东西(我希望目前还不支持)。
- Python 3.7 和 excess_args 的 SWIG 问题
- 从具有默认值的部分指定模板类继承时发生SWIG错误,具有不带默认值的正向声明
- 为重写std::exception的库生成swig接口时出错
- 元组由 Swig 生成的 Python 包装器返回,用于C++向量
- 无法使用 SWIG 在 Python 中实例化C++类(获取属性错误)
- SWIG Java 在使用 -DSWIGWORDSIZE64 时将int64_t转换为 jlong
- 使用 SWIG 更改生成的 CS 函数中的返回类型
- 在模板化函数中重新定义(忽略)的 SWIG 标识符
- 使用 swig 追加到字节数组
- 为什么'Go To Definition'给我多种选择?
- 如何使用 swig 修改类构造函数以保留对其中一个构造函数参数的引用?
- Java SWIG wrapper vs direct function calling
- 为什么在 Go 中将 float64 转换为 int32 会给出负数?
- <string> 如何在使用 SWIG 时将 int 数组和 List 作为参数传递给 C# C++
- 类型为 'std::map< char,int > 的 <Swig 对象的代理
- 如何在SWIG的帮助下使用C++Go代码中的共享库?
- 是否有一个示例如何使用SWIG生成GO Build的C Buidings
- 使用Go中的C++类使用Swig
- 使用 SWIG 将 OpenCV 的 C++ API 包装在 GO 中
- replace c++ with go + swig