![]() |
1
2
从你的例子和讨论中可以看出,你希望Lua成为主要语言,C++是客户。问题是,lua-c接口并不是这样设计的,lua就是客户机,所有的工作都是用c编写的,这样lua就可以轻松地调用它。 现在,重要的问题是:为什么您不希望对象有一个C表示,而更喜欢用Lua表示?因为C++是一种非常低级的语言,对象定义必须是静态的,而LUA动态地定义它的“对象”,所以LUA更容易适应C++对象。 我看到的另一个问题是,您似乎正在用 非常 面向对象的方式。记住,尽管Lua可以伪造面向对象的概念,但它不是作为面向对象的语言构建的,不应该主要作为一种语言使用。如果您想要一种完全面向对象的脚本语言,请使用python。 现在如果你 真的? 如果你想用另一种方式来做,考虑到其他的选择对你不起作用,那么我建议你将Lua对象作为协程,这将允许你:
但是,缺点是:
编辑: 下面介绍如何将接口公开给脚本中的对象,每个对象实例都将运行一个新的lua_状态,并单独运行其脚本,从而允许“对象成员数据”只是脚本实例中的全局数据。为对象方法实现API的过程如下:
|
![]() |
2
3
我不熟悉Swig(我知道它是什么,但从未用过),所以这可能不是你要找的答案。 我一直致力于C++项目,并已经成功地使用了 luabind .它允许你 subclass C++ objects with Lua objects . 你可能想试试看它是否适合你。 |
![]() |
3
1
您可以绑定任何您想要Lua的C函数并从那里调用它。你可以在这个函数中定义你期望的合同在你的脚本和C++代码之间。例如,以下内容可以满足您的需要。您需要将元表信息添加到您的lua表中,这样您就可以区分不同的lua对象类型。
您可以使用swig进一步绑定任意的C方法,但基本上是相同的。 |
![]() |
azraq1668 · 将swig重命名为ocaml时出现的奇怪行为 7 年前 |
|
Jan Kubik · 皮查姆·斯威格怎么做?[窗口] 7 年前 |
![]() |
bremen_matt · 设置Swig的编译器标志 7 年前 |
![]() |
Brian D · 禁用distutils扩展的链接步骤 7 年前 |