LuaTinker的作者是Kwon-il Lee韩国人写的,最新的版本是0.2.C,这个C++ wrapper For Lua能够方便和
快捷与C/C++通信,LuaTinker参考了luabind和luaplus的特征写的,虽然没有bindlua和luaplus这本强大
和提供很多功能,LuaTinker的实现只有两个文件,但是LuaTinker提供的基本能够满足大部的要求,用户
还可以对它进一步的扩充,而且用于游戏上特为方便,以下是LuaTinker使用C++结构和类的例子:
// 一个基类
struct base
{
base() {}
const char* is_base(){ return "this is base"; }
};
// 一个测试类
class test : public base
{
public:
test(int val) : _test(val) {}
~test() {}
const char* is_test(){ return "this is test"; }
void ret_void() {}
int ret_int() { return _test; }
int ret_mul(int m) const { return _test * m; }
A get() { return A(_test); }
void set(A a) { _test = a.value; }
int _test;
};
int main()
{
// 注册base类型到LUA
lua_tinker::class_<base>("base")
.def("is_base", &base::is_base)
;
// 注册test类型到LUA,注册test的成员函数和成员变量
lua_tinker::class_<test>("test")
.inh<base>() // 注册继承类
.def(lua_tinker::constructor<int>()) //注册构造函数
.def("is_test", &test::is_test) // 注册成员函数
.def("ret_void", &test::ret_void)
.def("ret_int", &test::ret_int)
.def("ret_mul", &test::ret_mul)
.def("get", &test::get)
.def("set", &test::set)
.def_readwrite("_test", &test::_test) // 注册成员变量
;
test g_test(11);
lua_tinker::decl("g_test", &g_test);
}
// Lua脚本
temp = test(4) 创建一个test类
print(temp._test) 打印test的_test成员
print(g_test)
print(g_test._test) 打印g_test的成员变量_test
print(g_test:is_test()) 输出信息
print(g_test:ret_int()) 返回g_test的成员变量_test
这么几句就能够方便的使用C/C++定义的结构或类,下一篇将会介绍其他的用法.
介绍完用法之后会从结构上分析lua_tinker的结构和设计.