lua与C++之间的互动:如何将C++的物件放到lua里面

来源:互联网 发布:js中foreach用法 编辑:程序博客网 时间:2024/04/29 15:53
做法是在C++这里写个全域函式负责动态配置物件,将它的函式指标传到lua之后会扮演建构子的角色,产生的物件指标会用lua的userdata来储存。


另外再写几个全域函式来负责操作物件指标,它们的函式指标传到lua之后会扮演成员函式的角色。


解构子则不需要以上做法,在储存物件指标的userdata上面就可以指定解构行为了,它的解构时间点跟C++不同,因为lua的垃圾收集机制不是可以清理时就会去清,所以不要以为区域物件在离开该区域时就会当场解构,而且由于指标的size太小,lua可能会累积超多物件才解构,你最好自己亲自呼叫"__gc"来解构。


将上面这些函式装到lua的table上面就可以直觉的使用C++的物件了。


要传给lua使用的全域函式有固定的格式,而且从lua取得参数以及送回传值给lua都需要呼叫lua介面来执行,你可以看到网路上有很多教学是自己写个Wrapper类别来当中间层,为类别量身打造一系列全域函式,这样写起来会很累,会让你想放弃,而且不能封装的全域函式会破坏OO架构,程式码不会好看到哪去。


幸亏C++还有样版这样的特别武器,可将上述手续给包装起来,真的轻松超多的,我的luapp专案就是在做这件事,luapp已经将这份工作包装的很舒服了。


当然台面上还有其他更成熟的专案提供更全面的功能,不过以我的需求来说,自制的luapp已经堪用了。
0 0
原创粉丝点击