LuaTinker

来源:互联网 发布:百无一用是书生知乎 编辑:程序博客网 时间:2024/06/05 10:52

LuaTinker 的作者是Kwon-il Lee韩国人写的,最新的版本是0.2.C,这个C++ wrapper For Lua能够方便和

快捷与C/C++通信,LuaTinker参考了luabind和luaplus的特征写的,虽然没有bindlua和luaplus这本强大

和提供很多功能,LuaTinker的实现只有两个文件,但是LuaTinker提供的基本能够满足大部的要求,用户

还可以对它进一步的扩充,而且用于游戏上特为方便,以下是LuaTinker使用C++结构和类的例子:

01// 一个基类
02struct base
03{
04 base() {}
05 
06 const char* is_base(){ return "this is base"; }
07};
08 
09// 一个测试类
10class test : public base
11{
12public:
13 test(int val) : _test(val) {}
14 ~test() {}
15 
16 const char* is_test(){ return "this is test"; }
17 
18 void ret_void() {}
19 int ret_int()   { return _test;   }
20 int ret_mul(int m) const return _test * m;  }
21 A get()    { return A(_test);  }
22 void set(A a)   { _test = a.value;  }
23 int _test;
24};
25 
26int main()
27{
28 // 注册base类型到LUA
29 lua_tinker::class_<base>("base")
30  .def("is_base", &base::is_base)
31  ;
32  
33 // 注册test类型到LUA,注册test的成员函数和成员变量
34 lua_tinker::class_<test>("test")
35  .inh<base>() // 注册继承类
36  .def(lua_tinker::constructor<int>()) //注册构造函数
37  .def("is_test", &test::is_test)           // 注册成员函数
38  .def("ret_void", &test::ret_void)
39  .def("ret_int", &test::ret_int)
40  .def("ret_mul", &test::ret_mul)
41  .def("get", &test::get)
42  .def("set", &test::set)
43  .def_readwrite("_test", &test::_test) // 注册成员变量
44  ;
45 
46 test g_test(11);
47  
48 lua_tinker::decl("g_test", &g_test);
49  
50}

// Lua脚本

1temp = test(4)  创建一个test类
2print(temp._test) 打印test的_test成员
3 
4print(g_test)    
5print(g_test._test) 打印g_test的成员变量_test
6print(g_test:is_test()) 输出信息 
7print(g_test:ret_int()) 返回g_test的成员变量_test

这么几句就能够方便的使用C/C++定义的结构或类