找回密码
 立即注册
查看: 349|回复: 4

有没有类似tolua++的库?

[复制链接]
发表于 2021-8-10 16:28 | 显示全部楼层 |阅读模式
tolua++和其他绝大多数lua binding库不同的一点,是可以通过在源代码里嵌入u002Fu002Ftolua_begin和u002Fu002Ftolua_end,导出两条注释之间的各种C++定义。这就使得代码的维护成本非常低,特别是导出枚举类型或者结构类型后,根本不需要维护即可自动导出到lua。然后,就可以将lua当作C++的元语言来生成相关的C++代码。
发表于 2021-8-10 16:34 | 显示全部楼层
泻药
这个自己写并不复杂,如果用modern c++的特性,还能写的更优雅,这里我给你2个思路,2个思路是递进的,一般情况下完成思路1就足够了。
1)用modern c++的可变模板参数的特性,写一个手动注册lua binding的框架,可以参考 SteveKChiu/lua-intf
2)用libclang读取c++的反射信息,针对配置好的类名,利用上面的库 动态代码生成代码;
发表于 2021-8-10 16:43 | 显示全部楼层
看看这个怎么样?c++11的https://github.com/jinjiazhang/lualib
发表于 2021-8-10 16:51 | 显示全部楼层
swig?
发表于 2021-8-10 16:54 | 显示全部楼层
tolua++ 稍作修改即可匹配到lua 5.3.x 我想是最适合你的方式。性能我觉的还行,tolua++使用的都是lua里面的接口,很直接,也很轻量。况且lua既然来做低频逻辑,那么速度可能不是优先级最高。你的问题我觉得是一个lua高版本适配而已。
这是我现在用的,已经适配lua 5.3.x
https://bitbucket.org/mm_longcheng/mm-lib/src/dev/build/toluapp/
https://bitbucket.org/mm_longcheng/mm-lib/src/dev/src/toluapp/

第一个链接是编译工程,第二个是修改后的源码,之所以分离,是因为工程是手动组建的,这样不会破坏源码的目录结构。里面硬编码的toluabind.c已经是配套的最新,所以直接编译即可。
LuaDist/toluapptolua++的官方仓库在这里,确实很久没更新了。我觉得这个库最大的毛病就是编译它十分困难。他首先是lua做的分析器,然后编译时有两个模式
第一个模式是开启-DTOLUA_SCRIPT_RUN开关,使用外部lua来做解释器。
第二个模式是关闭开关,使用硬编码到源码文件的lua模组做解释器。
有个tolua_scons.pkg就是用来生成硬编码源码文件。
也就是编译一个无依赖的tolua++生成器需要两个迭代,很不友好。
另一个毛病是code.lua里面 local s = clean(self.text) 这一行会把原本的lua文件的注释删除,导致实际报错的行数和原始的lua文件有差异,难以排错,这个编译时建议改成local s = self.text。
最后tolua++的官方版本只有"tolua++-1.0.92",那些93的版本全部都不相同,估计是别的人稍作修改自己加上的版本号。所以建议以1.0.92为蓝本,自行合并可取的93版。当然92版本已经够用了。
别的绑定库,比如LuaTinker等,这种通过编码绑定的库,也并不就好到哪里。而且tolua++还有一个bindings-generator tolua++ 可以参考cocos2d 3.x的lua导出脚本. 就是说有比较多的方式可以生成tolua++的范式注册文件,这个是别的方式所不具备的。
况且tolua++的文档和相关工程比较丰富,比如《饥荒》。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-24 04:45 , Processed in 0.091582 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表