由于在做其它工具时要用到这个东东,
但又用不到引擎的其它东西,
所以干脆把它拆出来了。
源代码放出来有需要的尽管拿去用好了,
只有一个luaclass.h文件。
以下是使用说明:
导出C++类到Lua模块
该模块用于导出类到Lua中,
支持继承和多继承类的导出,
并且可在Lua脚本里继承导出类。
注意:
1.使用LuaClass模块需要luaplus库。
2.不可在Coroutine内使用。
***********************************************************
使用说明:
***********************************************************
-----------------------------------------------------------
导出类 LuaClass<Class>(LuaState, ClassName, P)
-----------------------------------------------------------
ClassName为导出的类名,可以忽略,如果忽略仅仅把这个类导到Lua中用以在继承或导出类指针中使用。
P为导出类指针,用于导出类的同时导出该类的实例,如果使用这个参数需要指定ClassName。
class A
{
public:
void Fun1() {}
virtual void Fun2() {}
};
A *p = new A;
LuaClass<A>(LuaState, "A", p)
.def("Fun1", &A::Fun1) //导出类中的函数
.def("Fun2", &A::Fun2);
如上导出后在Lua中可以这样调用类上的函数:
A:Fun1()
A:Fun2()
-----------------------------------------------------------
导出继承类 LuaClassInherit<A, B>(LuaState, ClassName, P)
-----------------------------------------------------------
class B:public A
{
public:
void Fun2() {}
void Fun3() {}
}
先导出基类:
LuaClass<A>(LuaState)
.def("Fun1", &A::Fun1)
.def("Fun2", &A::Fun2);
再导出继承类:
LuaClassInherit<A, B>(LuaState, classname, p)
.def("Fun2", &B::Fun2)
.def("Fun2", &B::Fun3);
如果B是多继承类,比如还从C类继承,只需再导出一次即可:
LuaClassInherit<C, B>(LuaState, classname, p);
-----------------------------------------------------------
导出类指针 LuaExportPointer<A>(LuaState, p)
-----------------------------------------------------------
该函数返回一个LuaObject,
可以直接传给Lua:
A *p = new A;
LuaObject obj = LuaState->GetGlobals()["LuaFunc"];
LuaFunction<void> LuaFunc = obj;
LuaFunc(LuaExportPointer<A>(LuaState, p))
下载luaclass.h