实现简易的LUA嵌套表 读写接口

最近在做副本的脚本复用机制,之前想到的是用fork 这种方式从副本的静态数据里的state下得到一个一模一样的state,从此一来省掉 open 基础的脚本库和脚本文件的操作。 实现这种方案的时候发现能省的操作还真少,网上提到的lua rings这个库事实上只能给新建了个带 基础库 的new state ,并不是和已有state 一样的clone , 脚本环境初始化的操作还是得重新做。 转头一想这种clone 的state 里面实际只是对变量有分开存取的需求,只需要一个类似_G的数据包,在每个副本对应一个,宿主语言切进脚本前,能对当前的环境做出和副本对应的设置就行。按这种思路实现一个脚本变量环境管理器,只用在C这边对接口调用的时候管理一下包及其流水号映射关系。

实现上面提到的东西比较简单,这里就不详细说了,重点说一下访问脚本定义的变量。 在脚本里面定义的副本变量包含很多 表嵌套的格式,这种方式访问起来颇为麻烦,如果按标准的lua api接口,得一层层得提取出表来。 而luatinker::get 和 set 很不幸的是只能读取全局的一级变量,对于这种 xxx.ooo.1 的变量无法支持。没办法自己写一个吧,因为需要支持类变量,所以还得用到 luatinker的push 和pop 函数(这两个函数的作用是把userdata类型的传递加入一个tinker的壳,好在以后的push和pop时能找得到对应的类型做安全检查及其注册到metatable里的元方法)。具体实现如下

写入

	template<typename T>
	void setsub(lua_State* L, const char* name, T object)	
	{
		std::string strSrc(name);

		if(strSrc.empty())
			return ;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值