最近用luatinker发现真的挺好用,不仅可以轻松把 c++ 中 class 和 struct 对象导给 lua来调用, 而且连union 对象一样可以支持。
和 class 一样,一个union 如果需要让 lua中能创建能使用 ,必须调用 class_add,class_con,class_mem 来把 union 的 名字,构造,和 成员都暴露给lua ,所不同的是 class里面把成员变量暴露给lua,而union需要把union里所有嵌入的结构体,类或是默认类型都暴露给lua。
lua_tinker::class_add<UDemoDataChunk>(m_pLuaSate,"UDataChunk");
lua_tinker::class_con<UDemoDataChunk>(m_pLuaSate,lua_tinker::constructor<UDemoDataChunk>);
lua_tinker::class_mem<UDemoDataChunk>(m_pLuaSate,"int8",&UDemoDataChunk::nData8);
lua_tinker::class_mem<UDemoDataChunk>(m_pLuaSate,"int16",&UDemoDataChunk::nData16);
lua_tinker::class_mem<UDemoDataChunk>(m_pLuaSate,"int32",&UDemoDataChunk::nData32);
lua_tinker::class_mem<UDemoDataChunk>(m_pLuaSate,"uint8",&UDemoDataChunk::nDataU8);
lua_tinker::class_mem<UDemoDataChunk>(m_pLuaSate,"uint16",&UDemoDataChunk::nDataU16);
lua_tinker::class_mem<UDemoDataChunk>(m_pLuaSate,"uint32",&UDemoDataChunk::nDataU32);
lua_tinker::class_mem<UDemoDataChunk>(m_pLuaSate,"float",&UDemoDataChunk::ffloat);
使用的时候其实和class 也差不多,下面是脚本里取和写的例子
print(dest:getDataChunk(0).int16)
data = UDataChunk()
data.int16 = -5000
dest:chgDataChunk(0,data,1)
其中需要注意的是 data是在lua中申请创建的,但是lua并不管这个临时对象的释放,因为不是它去申请的内存,而是通过c++这边的构造,所以在chgdatachunk这个接口函数里面需要把传入的union对象进行删除
还有一点不由得再夸一下luatinker了,不管getDataChunk接口函数返回的是union 对象,还是union的指针,甚至是union的引用,
dest:getDataChunk(0).int16 的这种写法都能识别出真正int16中所在的位置
总结以上是内存溢出为你收集整理的lua 中 调用 union 对象全部内容,希望文章能够帮你解决lua 中 调用 union 对象所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)