当前位置: 首页 > news >正文

c++调用Lua(table嵌套写法)

通过c++调用lua接口将数据存储到虚拟栈中,就可以在lua脚本在虚拟栈中取得数据

c++调用lua库,加载lua文件,

lua_State* L;//定义一个全局变量***************************L = luaL_newstate();luaL_openlibs(L);//打开Lua脚本文件std::string path = SysContext::instance()->_env["WORKSPACE"] + "test.lua";luaL_dofile(L, path.c_str());lua_getglobal(L, "output");  //加载lua文件中的output函数pushLua(ObjsData(数据));int iRet = lua_pcall(L, 1, 1, 0);if (iRet)  // 调用出错{const char* pErrorMsg = lua_tostring(L, -1);lua_pop(L, 1);lua_close(L);return 1;}if (lua_isnumber(L, -1))  //取值输出{int fValue = lua_tonumber(L, -1);printf("fValue:%f\n", fValue);//do something}if (lua_isstring(L, -1))  //取值输出{std::string s = lua_tostring(L, -1);// do something}lua_close(L);

以下为c++调用lua接口存储数据

 其中 lua_settable(L, -3);

就是把表在lua堆栈中的值弹出来,index 是table 在堆栈中的位置,假如 table 在 -3, 则key 应该是 -2,value 是 -1

结构:最外层table=count+objs,count和objs都是一个table,objs内部又包含很多个table

void pushLua(ObjsData* obj) {int ntop = lua_gettop(L);lua_newtable(L);lua_pushstring(L, "count");  //这里需要output多一个输入lua_pushnumber(L, obj->count);lua_settable(L, -3);lua_pushstring(L, "objs");  //整体输入一个大的 tablefor (int i = 0; i < obj->count; i++) {const SingleObj* p = (const SingleObj*)&obj[1];lua_newtable(L);lua_pushnumber(L, i);lua_newtable(L);lua_pushstring(L, "x");lua_pushnumber(L, p->x);lua_settable(L, -3);lua_pushstring(L, "y");lua_pushnumber(L, p->y);lua_settable(L, -3);lua_pushstring(L, "z");lua_pushnumber(L, p->z);lua_settable(L, -3);lua_pushstring(L, "Volume");lua_pushnumber(L, p->volume);lua_settable(L, -3);lua_settable(L, -3);}lua_settable(L, -3);
}

lua脚本如下:

注意:table(键值对结构)嵌套,在取值的时候采用中括号取值,如objs[0]["x"],若key值是字符串,可以写成objs[0].x,但是数字应该只能写中括号的形式

str = "test" 
function output(x)print(x.objs[0].x)res= "count="..tostring(x.count)..",x="..tostring(x.objs[0].x)..",y="..tostring(x.objs[0].y).."\n"return res
end

参考:[Resolved] How to create nested Lua tables using the C API

相关文章:

c++调用Lua(table嵌套写法)

通过c调用lua接口将数据存储到虚拟栈中&#xff0c;就可以在lua脚本在虚拟栈中取得数据 c调用lua库&#xff0c;加载lua文件&#xff0c; lua_State* L;//定义一个全局变量***************************L luaL_newstate();luaL_openlibs(L);//打开Lua脚本文件std::string pat…...

算法复杂度分析

文章目录 有数据范围反推算法复杂度以及算法内容一般方法递归 有数据范围反推算法复杂度以及算法内容 c一秒可以算 1 0 7 10^7 107~ 1 0 8 10^8 108次 一般方法 看循环 有几层循环就可以初步分析O( n i n^i ni) 双指针算法除外O(n) 递归 公式法 根据公式的形式&#xff0…...

几款Java源码扫描工具(FindBugs、PMD、SonarQube、Fortify、WebInspect)

说明 有几个常用的Java源码扫描工具可以帮助您进行源代码分析和检查。以下是其中一些工具&#xff1a; FindBugs&#xff1a;FindBugs是一个静态分析工具&#xff0c;用于查找Java代码中的潜在缺陷和错误。它可以检测出空指针引用、资源未关闭、不良的代码实践等问题。FindBu…...

java springboot测试类鉴定虚拟MVC请求 返回内容与预期值是否相同

上文 java springboot测试类鉴定虚拟MVC运行值与预期值是否相同 中 我们验证了它HTTP的返回状态 简单说 校验了他 是否成功的状态 这次 我们来不对得到的内容 我们 直接改写测试类代码如下 package com.example.webdom;import org.junit.jupiter.api.Test; import org.springf…...

MongoDB随记

MongoDB 1、简单介绍2、基本术语3、shard分片概述背景架构路由功能chunk&#xff08;数据分片&#xff09;shard key&#xff08;分片键值&#xff09; 4、常用命令 1、简单介绍 MongoDB是一个分布式文件存储的数据库&#xff0c;介于关系数据库和非关系数据库之间&#xff0c…...

839 - Not so Mobile (UVA)

题目链接如下&#xff1a; Online Judge 这道题刘汝佳的解法极其简洁&#xff0c;用了20来行就解决了问题。膜拜…… 他的解法如下&#xff1a;天平&#xff08;UVa839紫书p157&#xff09;_天平 uva 839_falldeep的博客-CSDN博客 我写了两个&#xff08;都很冗长&#xff…...

php字符串处理函数的使用

php字符串处理函数的使用 trim() trim()函数的功能用于去除字符串首尾的空白字符(包括空格、制表符、换行符等&#xff09;。它可以用于清理用户输入的数据或去除字符串中的多余空格。 <?php $char" holle world! ";echo trim($char) ?>str_repl…...

UEC++ day8

伤害系统 给敌人创建血条 首先添加一个UI界面用来显示敌人血条设置背景图像为黑色半透明 填充颜色 给敌人类添加两种状态表示血量与最大血量&#xff0c;添加一个UWidegtComponet组件与UProgressBar组件 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category "Enemy …...

学习记录——ipv4、ipv6与ip、DNS、网络协议

文章目录 前情提要&#xff1a;网络协议和域名DNS协议、DNS污染Ipv4、Ipv6NAT协议&#xff0c;IP&#xff1a;端口&#xff0c;环节IP地址枯竭NAT-PT协议&#xff0c;加速Ipv6应用 前情提要&#xff1a; 本文仅做个人的学习记录以及理解&#xff0c;可能存在一些错误。 网络协…...

cefsharp119.4.30(cef119.4.3,Chromium119.0.6045.159)版本升级体验支持H264及其他多个H264版本

Cefsharp119.4.30,cef119.4.3,Chromium119.0.6045.159 此更新包括一个高优先级安全更新 This update includes a high priority security update. 说明:此版本119.4.3支持H264视频播放(需要联系我),其他版本。.NETFramework 4.6.2 NuGet Gallery | CefSharp.WinForms 119.…...

“index“ should always be multi-word

vue报错&#xff1a;Component name “index” should always be multi-word 分析&#xff1a;组件名要以驼峰格式命名&#xff0c;自定义的要以loginIndex.vue等这种方式命名&#xff0c;防止和html标签冲突&#xff0c;所以命名index.vue 会报错 解决&#xff1a;在.eslint…...

服务器64GB内存、8核CPU的MySQL 8配置参数

服务器64GB内存、8核CPU的MySQL 8配置参数可以按照以下步骤进行调优&#xff1a; 调整缓冲区相关参数&#xff1a; 增加innodb_buffer_pool_size的值&#xff0c;将其设置为4GB或更大&#xff0c;以加速频繁读取的操作。 – 2147483648 增加key_buffer_size的值&#xff0c;将…...

Python+Qt虹膜检测识别

程序示例精选 PythonQt虹膜检测识别 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《PythonQt虹膜检测识别》编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读。 学习与应用推…...

我的创作纪念日——365天

机缘 最开始我写博客没有什么特别的原因&#xff0c;主要是因为以下几点&#xff1a; 练习自己的语言组织能力 记录自己学习生活中学到的知识 主要还是想找一个好的保存 Markdown 笔记的平台。 最终我选择了 CSDN&#xff0c;一来是因为 CSDN 对 Markdown 语法的支持较为全面…...

安卓手机便签APP用哪个,手机上好用的便签APP是什么

在日常生活及工作方面&#xff0c;总是有许多做不完的事情需要大家来处理&#xff0c;当多项任务堆叠交叉在一起时&#xff0c;很容易漏掉一些项目&#xff0c;这时候大家会借助经常携带的手机来记录容易忘记的事情&#xff0c;如手机上的闹钟、定时提醒软件都可以用来记录待办…...

前端Date对象的使用锦集

Date 对象用于处理日期与时间。 创造对象 var d new Date(); var d new Date(milliseconds); // 参数为毫秒 var d new Date(dateString); var d new Date(year, month, day, hours, minutes, seconds, milliseconds);方法 getDate() 获取当前日期对象是几日(1-31) cons…...

如何将ONLYOFFICE与Python应用程序集成

ONLYOFFICE是一项功能强大的开源文档编辑器&#xff0c;可以将文本文档、电子表格和演示文稿、电子表单编辑功能集成至任何编程语言编写的 Web 应用程序中。最新的7.5版本编辑器可以支持编辑PDF文件&#xff08;批注、绘图等&#xff09;。在本文中&#xff0c;我们会带你了解如…...

vector的简单模拟实现_C++

目录 一、vector的数据结构 二、vector的构造 三、vector的增删查改及空间管理 四、全部代码 一、vector的数据结构 vector以线性连续空间为基础来定义数据结构以及扩展功能。vector的两个迭代器&#xff0c;分别是start和finish&#xff0c;分别指向配置得来的已被使用的空…...

合并两个有序链表,剑指offer,力扣

目录 力扣题目地址&#xff1a; 原题题目&#xff1a; 我们直接看题解吧&#xff1a; 解题方法&#xff1a; 审题目事例提示&#xff1a; 解题思路&#xff1a; 具体流程如下&#xff1a; 代码实现&#xff1a; 知识补充&#xff1a; 力扣题目地址&#xff1a; 21. 合并两个有序…...

Delphi 12 Athens 发布了!

官方安装包 ☞ https://altd.embarcadero.com/download/radstudio/12.0/RADStudio_12_0_4915718.iso 安装辅助工具、控件可以戳这里 &#xff1a;Delphi 12 资源 RAD Stuido 12 Athens &#xff0c;这次更新的细节还是比较多的&#xff0c;但主要还是多端&#xff08;iOS、An…...

Midscene.js:基于视觉AI的跨平台UI自动化终极解决方案

Midscene.js&#xff1a;基于视觉AI的跨平台UI自动化终极解决方案 【免费下载链接】midscene AI-powered, vision-driven UI automation for every platform. 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene Midscene.js是一款革命性的AI驱动UI自动化工具…...

Geatpy旅行商问题(TSP)求解:编码策略与优化技巧

Geatpy旅行商问题(TSP)求解&#xff1a;编码策略与优化技巧 【免费下载链接】geatpy Evolutionary algorithm toolbox and framework with high performance for Python 项目地址: https://gitcode.com/gh_mirrors/ge/geatpy 旅行商问题&#xff08;TSP&#xff09;作为…...

Phi-mini-MoE-instruct降本提效:相比70B模型节省85% GPU成本实测

Phi-mini-MoE-instruct降本提效&#xff1a;相比70B模型节省85% GPU成本实测 1. 项目概述 Phi-mini-MoE-instruct是一款轻量级混合专家&#xff08;MoE&#xff09;指令型小语言模型&#xff0c;在保持高性能的同时大幅降低了计算资源需求。该模型采用创新的MoE架构&#xff…...

定义“具身智造”新范式,海康机器人助推制造业全面升维

近日&#xff0c;「海康机器人智造大会2026」在杭州桐庐举办。来自PCB、汽车制造、机械制造、3C、新能源、商业流通等领域的800余位全球合作伙伴及行业专家出席。 大会期间&#xff0c;海康机器人除首次面向业界提出“具身智造”这一全新理念外&#xff0c;还集中发布了35款核心…...

自建免费AI搜索技能:基于SearXNG与Firecrawl的Agent联网方案

1. 项目概述&#xff1a;一个免费、可自部署的Web搜索技能最近在折腾AI Agent和智能助手&#xff0c;发现一个挺普遍的需求&#xff1a;让AI能联网搜索。市面上方案不少&#xff0c;但要么收费&#xff0c;要么限制多&#xff0c;要么就是得自己从零开始搭一套复杂的爬虫和解析…...

微信聊天记录永久保存指南:用WeChatMsg打造你的数字记忆银行

微信聊天记录永久保存指南&#xff1a;用WeChatMsg打造你的数字记忆银行 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we…...

鸿蒙Ads Kit(广告服务):激励广告开发(二)

激励广告是一种全屏幕的视频广告&#xff0c;用户可以选择点击观看&#xff0c;以换取相应奖励&#xff08;如游戏复活、获取道具、积分等&#xff09;。一、场景介绍激励广告是一种全屏幕的视频广告&#xff0c;用户可以选择点击观看&#xff0c;以换取相应奖励。场景&#xf…...

UE资源加载避坑指南:FSoftClassPath、TSoftClassPtr与蓝图Cast节点的正确使用姿势

UE资源加载避坑指南&#xff1a;FSoftClassPath、TSoftClassPtr与蓝图Cast节点的正确使用姿势 在虚幻引擎开发中&#xff0c;资源加载是每个项目都无法绕开的核心环节。很多开发者在使用蓝图Cast节点或C软引用时&#xff0c;常常因为概念混淆而导致内存管理失控。本文将深入剖析…...

掌握AI写专著技巧,借助工具轻松生成20万字专业专著!

撰写学术专著的过程中&#xff0c;如何在“内容的深度”和“覆盖的广度”之间取得恰当的平衡&#xff0c;成为了许多研究者难以逾越的障碍。从深度上看&#xff0c;专著需要表达出足够的学术深度&#xff0c;不仅要清晰解答“是什么”&#xff0c;更要深入探讨“为什么”和“怎…...

别再手动传文件了!用Alfresco Community 201707搭建企业文档共享中心(附Word在线编辑避坑指南)

企业级文档协作革命&#xff1a;Alfresco Community实战指南 研发团队每周的文档管理例会总是充满火药味——"最新版需求文档在哪&#xff1f;""我改了三次的PPT怎么又被覆盖了&#xff1f;""这个10MB的产品手册打不开&#xff01;"这些场景是否…...