luabind常用方法总结

转自  http://blog.csdn.net/caoyanting007/article/details/5709820

 

 

luabind比较复杂,功能包罗万象,但使用起来比较简单,特别是最常用的方法只有几个,下面结合一个简单的例子总结一下。

    在我们游戏应用中,一般都是已c++为主导的,也就是说c++主动调用lua脚本。
 
先写一个比较常见的lua脚本:
 
nGlobal = 10 --一个全局的整形变量 
strGlobal = "hello i am in lua" --一个全局的字符串变量 
--一个返回值为int类型的函数 
function add(a, b) 
return a+b 
end 
--一个返回值为string类型的函数 
function strEcho(a) 
print(a) 10 
return 'haha i have print your input param' 
end 
cppapi.testFunc() --调用c++暴露的一个测试函数 
t={name='ettan', age=23, desc='正值花季年龄'}

 

 

////////////////////////////////////lua脚本结束
 
下面写c++函数中的调用了
 
#include<iostream>
#include<string>
using namespace std;
#include<lua.hpp>
#include<luabind/function.hpp>
void testFunc()
{
cout<<"helo there, i am a cpp fun"<<endl;
}
int main(int argc, char* argv[])
{
//首先声明luaState环境
using namespace luabind;
lua_State* L = lua_open();    //也可以用luaL_newState()函数
luaL_openlibs(L);    //注意将lua默认库打开,要不会出现N多错误的,比如print函数都没有
//将c++中的函数暴露给lua
module(L, "cppapi")
[
def("testFunc", (void(*)(void))testFunc)
];
//加载lua脚本,我们临时起名test.lua
luaL_dofile(L, "test.lua");
try
{
//调用lua中的整形全局变量
int nLuaGlobal = luabind::object_cast<int>(luabind::globals(L)["nGlobal"]) ;
//调用lua中的字符串变量
string strLuaGlobal = luabind::object_cast<string>(luabind::globals(L)["strGlobal"]);
//获取table,方法一,通过luabind::object 固有方法
luabind::object luaTable = luabind::globals(L)["t"] ;
string name=luabind::object_cast<string>(luaTable["name"]) ;
int age = luabind::object_cast<int>(luaTable["age"]) ;
//获取table,方法二,通过gettable
string desc = luabind::object_cast<string>(luabind::gettable(luaTable,"desc"));
//下面是调用lua中函数
int nAddRes = luabind::call_function<int>(L, "add", 3, 4) ;
string strEchoRes = luabind::call_function<string>(L, "strEcho", "c++参数") ;
}
catch(...)
{
cout<<"error"<<endl;
}
return 0;
}

 

posted @ 2012-11-01 17:20  最终解释权  阅读(889)  评论(0编辑  收藏  举报