C++调用lua函数的一种通用办法

在C++中调用lua函数的一般方式如下:

 

如果有很多个脚本函数需要调用,按上面的方式就要写很多个与之对应的C++函数,当然也可以利用C++的重载,把函数名作为参数,每种参数组合实现一个重载函数,则上面的代码可以改为:

 

如果有两个不同的lua函数,它们的参数是一样的,则可以共用同一个common_call,但是不同的参数组合就必须有一个与之对应的common_call,实现起来还是很麻烦,重复代码仍然很多。《Programming in Lua》上提供了一种通用的办法,用变长参数实现的,见http://www.lua.org/pil/25.3.html 但是仍然觉得不是太好,那个描述字符串很难看!一番思考后折腾出了下面这个方法:

对于不同类型的参数,唯一不同的就是压栈时的API不一样,数字使用lua_pushnumber,bool型是用lua_pushbool,字符串是用lua_pushstring等,所以抽象出一个参数基类来,提供一个虚拟的pushvalue接口,然后各种实际类型实现自己的pushvalue就可以了,代码如下:

 

看起来问题已经解决了,但是仍然不够彻底,用户需要自己去构造一个TArg*的vector,对于每一种参数类型,用户需要知道它对于的基类是什么,下面把参数做进一步的封装:

 

 

然后用户需要调用lua函数的时候只需要构造一个TArgPool对象就行了:

 

这样基本上满足需求了~

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值