您的位置:首页 > 编程语言 > Lua

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

2016-09-27 16:09 141 查看
做法是在C++这里写个全域函式负责动态配置物件,将它的函式指标传到lua之后会扮演建构子的角色,产生的物件指标会用lua的userdata来储存。

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

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

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

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

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

当然台面上还有其他更成熟的专案提供更全面的功能,不过以我的需求来说,自制的luapp已经堪用了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: