8.lua调用c++函数传递表和参数类型检查
来源:互联网 发布:svm推荐算法 编辑:程序博客网 时间:2024/06/08 14:35
1.lua_next(L,3)
*先从栈顶弹出一个key
*从栈指定位置的table里取下一对key-value,先将key入栈再将value入栈
*如果第二部成功则返回非0值
c++:
//lua调用c++函数传递表key-value和参数类型,遍历
int CTestTable1(lua_State *L)
{
lua_pushnil(L); //先在栈顶压入一个空的,因为lua_next会先弹出一个key
while (lua_next(L, 1) != 0)//表在栈底
{
//先push key,push value
printf("%s = ", lua_tostring(L, -2));
printf("%s\n", lua_tostring(L, -1));
lua_pop(L, 1);//因为上面Lua_next会把key出栈,不会把value出栈所以要把value出栈
}
return 0;
}
//main
lua_register(L, "CtestArr1", CTestTable1);
lua:
-------------lua调用C++传递key-value表----------]
local tab = {name="xiaoming",age="18",id="123"};
CtestArr1(tab);
2.Lua调用c++遍历table,只取表中的一个数据
lua_pushnil(l);
while(lua_next(l,3) != 0)
{
printf("%s - %s\n",lua_tostring(l,-2),lua_tostring(l,-1)); //第一个参数是Lua,第二个是在栈中的位置,第三个是key
lua_pop(l,1);
}
c++:
int CTestTable2(lua_State *L)
{
lua_getfield(L,1,"name");//从栈底获取name的值放到栈顶
printf("name = %s\n",lua_tostring(L,-1)); //再从栈顶中取到值
}
//main()
lua_register(L, "CtestArr2", CTestTable2);
lua:
-----------------c++查看表中一个值-----------------
local tab = {name="xiaoming",age="18",id="123"};
CtestArr2(tab);
3.Lua调用c++参数类型检查,
luaL_checktype(l,1,LUA_TBOOLEAN);//不匹配就往下执行
if(LUA_type(l,1)!= LUA_TBOOLEAN)
{
luaL_argerror(l,1,"bad argument");
}
c++:
int CTestTable3(lua_State *L)
{
//1,真 //2 假
luaL_checktype(L,1,LUA_TTABLE);
//检查是否为表,真的会继续执行,假的话会停止整个Lua的执行
}
//main()
lua_register(L, "CtestArr3", CTestTable3);
lua:
//1 真
local tab = {"name = "xiaoming",age="22",id="007"};
//假 tab = 1;
CTestTable3(tab);
如果在实际的应用中希望检查又不希望停止就用这个
c++:
int CTestTable3(lua_State *L)
{
//1,真 //2 假
luaL_checktype(L,1,LUA_TTABLE); //判断第一个参数
//检查是否为表,真的会继续执行,假的话会停止整个Lua的执行
if(lua_type(L,2) != LUA_TUNMBER) //判断第二个参数
{
printf("para 2 is not number\n");
}
}
//main()
lua_register(lua,"CtestTable",CTestTable3);
lua:
local tab = {"name = "xiaoming",age="22",id="007"};
local size = 108;
//传数字type判断为真
CtestTable(tab,size);
//传字符串,判断错误也会执行
CtestTable(tab,"11111");
阅读全文
0 0
- 8.lua调用c++函数传递表和参数类型检查
- C语言函数调用传递参数时的类型退化
- C/C++函数调用时参数传递和命名规范
- lua和c互调 参数传递
- 6.Lua调用c++函数传递普通参数
- 系统调用和函数参数传递
- 函数的调用和参数的传递
- .和:调用函数参数的传递
- Matlab的函数调用和参数传递
- 类型安全的 C++/Lua 任意参数互调用
- LUA函数参数传递问题
- python调用c函数参数类型问题
- [lua]C调用lua函数
- 关于C语言中函数调用和参数传递机制的探讨(一 .无参数传递)
- 关于C语言中函数调用和参数传递机制的探讨(二 .传递一个参数)
- 关于C语言中函数调用和参数传递机制的探讨(三 .传递多个参数等)
- Lua调用C函数
- lua 调用c函数
- Codeforces
- Centos7下快速安装Mongo3.2
- 【网络流24题】最小路径覆盖(二分图匹配)
- 7.Lua调用c++传递数组函数
- Calculus Midterm
- 8.lua调用c++函数传递表和参数类型检查
- 1003.我要通过!
- LintCode_491_回文数
- Android中运用OpenGL
- 9.Lua调用c++函数获取返回值
- 根据不同的值给父级div添加class样式
- 翻翻棋
- 甲骨文武国平高吉戠至模组:命令(其六)
- I