剑孤寒的小站

人生的价值不是用时间,而是用深度去衡量的!
posts - 75, comments - 290, trackbacks - 0, articles - 0

由于在做其它工具时要用到这个东东,
但又用不到引擎的其它东西,
所以干脆把它拆出来了。
源代码放出来有需要的尽管拿去用好了,
只有一个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

Feedback

# re: Galaxy2D 导出类到Lua模块源代码  回复  更多评论   

2010-05-10 20:45 by tyt2008cn
多谢楼主了哈,正在想怎么用LuaPlus实现类的继承,该死的LuaPlus居然不直接提供该功能;

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理