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已经堪用了。
另外再写几个全域函式来负责操作物件指标,它们的函式指标传到lua之后会扮演成员函式的角色。
解构子则不需要以上做法,在储存物件指标的userdata上面就可以指定解构行为了,它的解构时间点跟C++不同,因为lua的垃圾收集机制不是可以清理时就会去清,所以不要以为区域物件在离开该区域时就会当场解构,而且由于指标的size太小,lua可能会累积超多物件才解构,你最好自己亲自呼叫"__gc"来解构。
将上面这些函式装到lua的table上面就可以直觉的使用C++的物件了。
要传给lua使用的全域函式有固定的格式,而且从lua取得参数以及送回传值给lua都需要呼叫lua介面来执行,你可以看到网路上有很多教学是自己写个Wrapper类别来当中间层,为类别量身打造一系列全域函式,这样写起来会很累,会让你想放弃,而且不能封装的全域函式会破坏OO架构,程式码不会好看到哪去。
幸亏C++还有样版这样的特别武器,可将上述手续给包装起来,真的轻松超多的,我的luapp专案就是在做这件事,luapp已经将这份工作包装的很舒服了。
当然台面上还有其他更成熟的专案提供更全面的功能,不过以我的需求来说,自制的luapp已经堪用了。
相关文章推荐
- 如何在Lua与C/C++之间实现table数据的交换
- 如何使用Lua扩展C/C++应用系列1
- 如何使用Lua扩展C/C++应用系列3
- 在C/C++如何调用Lua
- [C++] 在imagemagick里面如何设置jpeg:dct-method
- [C++] 在imagemagick里面如何设置jpeg:dct-method
- 如何使用Lua扩展C/C++应用系列3-转自bbs.luachina.net
- .net程序如何把引用的dll放到子目录里面
- C++ 如何:在各种字符串类型之间进行转换
- 【转贴】如何在C++中集成Lua脚本(LuaPlus篇)
- stackoverflow | C/C++ | 如何不使用循环和判断语句实现“打印从1到100之间的数字”
- 如何在C++中集成Lua脚本(LuaPlus篇)
- 如何在C++中集成Lua脚本(LuaPlus篇)
- C++中如何调用C里面的函数
- 【程序语言】C/C++中如何使用Lua脚本
- 如何使用Lua扩展C/C++应用系列2
- C++里面如何调用系统命令
- 在c++里面如何对读取出二进制数据进行操作
- c++ linux 如何把 char* 里面的中文 insert进入mysql(相应的字段为varchar类型)
- 如何把其他项目中编写好的 自定义控件 放到自己的项目里面使用 (Multi-ListBox ASP.NET控件)