最近在做项目时,需要在lua脚本中,对c++的一个容器进行遍历。查了半天的资料,没有一劳永逸的办法。只好使用了较鹾的办法。源码列出来了,等着板砖。
c++代码:
extern "C"
{
#include "lua.h"
#include "lualib.h"
#include "luaxlib.h"
}
#pragma comment(lib,"lua51.lib")
#pragma comment(lib,"lua5.1.lib")
#pragma comment(lib,"tolua++.lib")
#define maxnum 10
std::vector<int> globalvec;
static int getmaxnum(Lua_state*L)
{
size_t size = globalvec.size();
lua_pushnumber(L,size);
return 1;
}
static int getvalue(lua_State*L)
{
size_t index= lua_tonumber(L,-1);
if(index > globalvec.size()
{
return 0;
}
lua_pushnumber(L,globalvec[index]);
return 1;
}
static int getvalue(unsigned int index)
{
if(index >= globalvec.size())
{
return 0;
}
return globalvec[index];
}
static int testc()
{
unsigned int index =0;
while(index < globalvec.size())
{
getval(index++);
}
}
main()
{
for(unsigned int i =0;i < maxnum;i ++)
{
globalvec.push_back(i);
}
L= lua_open();
luaopen_base(L):
luaL_ openlibs(L);
luaL_dofile(L,"test.lua");
lua_register(L,"getmaxindex",getmaxindex);
lua_register(L,"getvalue",getvalue);
LARGE_INTER startime1,starttime2,endtime1,endtime2;
LARGE_INTER frequency;
QueryPerformanceFrequency(&frequency);
QueryPerformanceCounter(&starttime1);
lua_getglobal(L,testfunc);
lua_call(L,0,0);
QueryPerformanceCounter(&endtime1);
QueryPerformanceCounter(&starttime2);
testc();
QueryPerformanceCounter(&endtime2);
float interval1 = (1000 * endtime1.QuardPart - 1000 *starttime1.QuardPart)/frequency.QuardPart;
float interval2 = (1000 * endtime2.QuardPart - 1000 * starttime.QuardPart)/frequencey.QuardPart;
lua_close(L):
return 1;
}
lua脚本:
function testfunc()
local index =0
local maxindex = getmaxindex()
local value =0
while index < maxindex do
value = getvalue(index)
index = index+1
print(value)
end
最后测下来lua效果还不错,放心大胆的使用了