最近研究如何通过C++将数组或向量数据压入Lua栈,然后通过Lua对数组或向量进行处理之后,返回处理结果给C++。使用Userdata当然是一种选择,但是需要在C++中为Lua定义操作Userdata的接口,比较麻烦。最后还是决定用Lua Table来实现。
在Lua中,table是一种很强大的存在,可以用来处理数组、向量、字典等常用数据结构,并且可以使用nil之外的任意类型的值做索引,且可根据需要动态扩容。
前面的文章已经分享了如何通过C++遍历Lua表中的数据进行处理:lua_next()函数遍历lua表
本篇是一个反向的尝试,通过表的方式,使得Lua能够处理C++中的数组或向量数据。简单起见,这篇先介绍处理一维表。
先来定义一个函数,用于将向量压入Lua栈,并调用Lua函数进行处理,并读取处理之后的结果:
/* 定义一个函数,将一个字符串向量中的内容压入Lua栈,并调用Lua函数对其进行处理 */
int put_array_to_lua(lua_State *L, std::vector<std::string> str_vec)
{
lua_getglobal(L, "test_table");
std::cout << "lua_isfunction(L, -1) = " << lua_isfunction(L, -1) << std::endl; //判断栈顶是否函数
lua_newtable(L);
std::cout << "luaL_typename(L, -1) = " << luaL_typename(L, -1) << std::endl; //现在table位于栈顶
std::cout << "luaL_typename(L, -2) = " << luaL_typename(L, -2) << std::endl; //


4393

被折叠的 条评论
为什么被折叠?



