这是学习tolua++的最后一篇了。在这一篇里完成一个稍微复杂一点的例子(^_^其实还是很简单)。 导出三个类CBase、CDerived1、CDerived2到lua,导出两个函数toDerived1、toDerived2。lua脚本中声明两个函数Derived1Test和Derived2Test,我们在C++中调用。Derived1Test和Derived2Test会调用toDerived*对其参数进行向下转换(从CBase转到CDerived*),然后调用派生类的方法做一些测试。 基本上和前面几个例子类似,新增加的部分是在C++中调用Lua脚本里定义的函数。这牵涉到虚拟栈的操作,后面会解释一下。 还是老样子,先把实际的头文件列出来。tlclass.h如下:
tlclass.pkg如下:
这次多定义了两个函数toDerived1和toDerived2,全局的。我们也可以把他们直接放在类中,或者一个MODULE中。module大概是类似的namespace的东西,把一堆杂七杂八的家什如变量、常量、函数、类实例等放在一起,在lua中通过"."来访问。下面是手册中的例子:
{
CBase(){}
virtual ~CBase()
void ShowMessage(){printf("BaseClass );}
staticchar* ClassName(){ returnCBase; }
:
CDerived1()
CDerived1()
ShowMessage()Derived1Class
ShowDerived1()show derived11111
:
CDerived2(){m_nNumber=0;}
CDerived2()
ShowMessage()Derived2Class
ShowDerived2()show derived22222
SetNumber(int num){ m_nNumber num; }
GetNumber() m_nNumber; }
$#include
"
tlclass.h
:
:
ShowDerived2();
module mod
{