标签:
二、堆栈的操作
因为Lua与C/C++是通过栈来通信,Lua提供了C API对栈进行操作。
我们先来看一个最简单的例子:
#include <iostream>
#include <string.h>
using namespace std;
extern "C"
{
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
}
void main()
{
//1.创建一个state
lua_State *L = luaL_newstate();
//2.入栈操作
lua_pushstring(L, "I am so cool~");
lua_pushnumber(L,20);
//3.取值操作
if( lua_isstring(L,1)){ //判断是否可以转为string
cout<<lua_tostring(L,1)<<endl; //转为string并返回
}
if( lua_isnumber(L,2)){
cout<<lua_tonumber(L,2)<<endl;
}
//4.关闭state
lua_close(L);
return ;
}可以简单理解为luaL_newstate返回一个指向堆栈的指针,其它看注释应该能懂了吧。
其他一些栈操作:
int lua_gettop (lua_State *L); //返回栈顶索引(即栈长度) void lua_settop (lua_State *L, int idx); // void lua_pushvalue (lua_State *L, int idx);//将idx索引上的值的副本压入栈顶 void lua_remove (lua_State *L, int idx); //移除idx索引上的值 void lua_insert (lua_State *L, int idx); //弹出栈顶元素,并插入索引idx位置 void lua_replace (lua_State *L, int idx); //弹出栈顶元素,并替换索引idx位置的值ua_settop将栈顶设置为一个指定的位置,即修改栈中元素的数量。如果值比原栈顶高,则高的部分nil补足,如果值比原栈低,则原栈高出的部分舍弃。所以可以用lua_settop(0)来清空栈。
标签:
原文地址:http://blog.csdn.net/heyuchang666/article/details/51613016