我面临着使 C++ 应用程序可由用户编写脚本的任务。该应用程序已经开发了好几年,以前没有人在这方面浪费过任何想法。它包含各种细节,如多线程、模板巫术和多重继承。作为脚本语言,Python 是首选,但如果 Lua 更容易实现,则可能会被接受。
问题 1
从我目前所了解到的情况来看,大致有两种方法可以将 Python/Lua 与 C++ 集成:“扩展”和“嵌入”。
在这种情况下,看起来我需要两者。脚本语言需要访问应用程序中的对象、方法和数据,但需要在用户编写脚本后由应用程序调用 - 无需重新启动任何内容。
这在现实世界中通常是如何完成的?
问题2
那里似乎有一系列令人眼花缭乱的手动解决方案和绑定生成器,所有这些都不够完美。
- swig,pyste,Py++,ctypes,Boost.Python sip,PyCXX,pybindgen,robin,(Cython/Pyrex,Weave)
- CppLua、Diluculum、Luabind、Luabridge、LuaCpp、Luna/LunaWrapper、MLuaBind、MultiScript、OOLua、SLB、Sweet Lua、lux(此列表来自 lua wiki)
- CPB、tolua、tolua++、toLuaxx、luna 和再次痛饮
在网上找到的大多数评论都有些过时了。例如,据说 swig 在非平凡的情况下很困难,并且会生成难以理解的代码。OTOH,它最近已经升级到 v2.0。
上面一些使用 pygccxml 让 gcc 分析 C++ 代码然后生成绑定。我觉得这个想法很有吸引力,因为 gcc 可能比我更了解代码:-)。这行得通吗?
对它们全部进行测试可能很容易花费我为整个项目分配的一半时间。
那么,你推荐哪些?