C++ Lua/C++;从头装订

C++ Lua/C++;从头装订,c++,c,oop,binding,lua,C++,C,Oop,Binding,Lua,我是Lua的新手,正在努力理解一些基本原理。我想理解的是将Lua绑定到C++实例。 我对第三方库不感兴趣,我想从更基本的层面来理解这一点-谢谢:) 以下是我的问题: 根据我所读到的内容,我的假设是Lua只能绑定到静态C函数。这是正确的吗 这是否意味着要绑定C++类的实例,我首先需要为每个方法和属性GETT/SETTER编写静态函数,接受实例指针作为参数。< /LI> 我会向Lua注册这些函数 我将传递一个指向C++类实例的指针。 从Lua调用一个注册函数,传递C++实例指针。 静态函数取消对指针

我是Lua的新手,正在努力理解一些基本原理。我想理解的是将Lua绑定到C++实例。 我对第三方库不感兴趣,我想从更基本的层面来理解这一点-谢谢:)

以下是我的问题:

  • 根据我所读到的内容,我的假设是Lua只能绑定到静态C函数。这是正确的吗
  • 这是否意味着要绑定C++类的实例,我首先需要为每个方法和属性GETT/SETTER编写静态函数,接受实例指针作为参数。< /LI>
  • 我会向Lua注册这些函数
  • 我将传递一个指向C++类实例的指针。
  • 从Lua调用一个注册函数,传递C++实例指针。
  • 静态函数取消对指针的引用,调用等效方法
  • 这有意义吗?还是我做错了什么


    谢谢你读到这里。

    这正是我的盟友

    1) 卢阿。。。它并不是真的绑定到东西上,你需要做的是“善用Lua”,这需要了解Lua是如何工作的

    我真的建议你读一下

    这告诉你Lua实际上能做的一切。Lua给你的函数让你可以操纵这些结构

    在那之后,一切都变得更有意义了

    为什么这个答案应该到此结束

    你1点后的问题都错了。1在语义上是错误的,静态函数只有内部/弱链接。我猜你的意思是“不是一种方法”

    2) 不是真的,记住你对对象有很好的“self”/“this”标识(对表/元表有lua标识)——你不绑定到方法

    你想让Lua用一个“self”参数调用你的函数,“self”(不管它是什么,一个简单的整数ID,或者一个void,如果你感到危险的话)应该告诉你你在用什么ojbect


    3/4/5/6没有什么意义,请阅读该文档:)如果您需要更多或有更具体的内容,请对此进行评论。顺便说一句,这不是一个坏问题,只是很幼稚而已。

    绑定不同的语言通常是通过C接口完成的(ABI更好地定义为C)。我对lua不太熟悉,不知道细节,但我的建议是选择库解决方案。您将重新发明轮子,使其与现有解决方案一样圆润可能不是一件小事。至少,看看这些库是做什么的。谢谢,但我特别想了解Lua的原理,因为我不想(不允许)使用第三方库。我已经研究了一些库,但我只对其工作原理感兴趣,无法从库(高度抽象、大量阅读)中理解。许多使用Lua-C++绑定的第三方库都是开源的。为了理解他们,你可以随时观察他们是如何做事的。不过请注意:嗨,亚历克,谢谢你的回答——我对Lua的工作原理很熟悉;通过堆栈、表和元表进行通信,用于存储/组织数据。我想问题可能在于我对绑定的术语。我想从Lua调用C++实例上的函数。你希望Lua用“自我”的观点来调用你的函数,“自我”应该告诉你你在用什么方法。“是的,完全正确。那么我应该如何实现这一点,如果我创建一个C++空格函数,接受一个空洞*并去引用它,然后在C++实例上调用一个等价的方法?@ USS1654,这取决于你,记住,如果你敢用void*的方式,使用dynamic_cast,你会惊讶于坏的cast通常不会导致崩溃。为什么不看看教程或其他库的代码呢。我就是这样学的。好的,太好了,谢谢亚历克。我主要担心的是这种方法不好,或者不受欢迎。由于您的回复,我对简单地运行代码并查看发生了什么更有信心:)顺便感谢dynamic_cast提示。测试Lua中的指针是否为正确类型的好主意。:)再次感谢!嗨,亚历克,我昨天投了赞成票(也接受了你的第一个回答作为有效答案)-很抱歉,事情不是这样的。它在我的浏览器中显示为向上投票-现在是否也解决了您的问题?谢谢