
概述 <将简单C++类导出到lua> 利用tolua++导出类到lua中简单方便,你可以导出静态成员函数、普通成员函数、静态成员变量、普通成员变量,你也可以指定类的哪些方法被导出。你可以将具有单继承的派生类导出,派生类可以很自然地访问基类的方法。更多的细节,请参考 tolua++的在线文档。 首先生成实际的c++头文件,定义我们要导出的类。tclass.h内容如下: #ifndef _ <将简单C++类导出到lua> 利用tolua++导出类到lua中简单方便,你可以导出静态成员函数、普通成员函数、静态成员变量、普通成员变量,你也可以指定类的哪些方法被导出。你可以将具有单继承的派生类导出,派生类可以很自然地访问基类的方法。更多的细节,请参考 tolua++的在线文档。 首先生成实际的c++头文件,定义我们要导出的类。tclass.h内容如下:
#ifndef _TESTCLASS_H #define _TESTCLASS_H #include < string .h > class CNumber ... { //tolua_export public: tolua_begin CNumber():m_nNum(0) ...{ } CNumber(int num):m_nNum(num) ...{ } ~CNumber() ... voID SetNumber( num) ...{ m_nNum = num; } GetNumber() ...{ return m_nNum; } Add( num) ...+= num; tolua_end protected m_nNum; } ; // tolua_export tolua_begin cmessage ... { tolua_end cmessage() ...{ strcpy(m_szMessage, "initial message); } cmessage(char *initmsg) ...if(initmsg) strncpy(m_szMessage, initmsg,0);">256cmessage() ... SetMessage(msg) ...(msg) ...{ strncpy(m_szMessage, msg,0);">); } }GetMessage() ... m_szMessage; } ShowMessage() ...{ printf(this message is printed in c++ code when lua call ShowMessage:%s , m_szMessage); } m_szMessage[]; } tolua_export #endif 为了方便,我把实现也放在了头文件中。 接下来定义pkg文件,tclass.pkg。 $#include " tclass.h ... CNumber(); CNumber( num); CNumber(); GetNumber( } cmessage ... cmessage(); cmessage( initmsg); cmessage(msg); GetMessage(); ShowMessage(); tolua_export 和我们的第一个数组的例子一样,包含实际的C头文件,用tolua++的语法声明你想导出的部分。在导出类的时候,构造函数被映射到lua中的new,析构函数被映射为delete。他们的用法可以在后面的lua代码中看到。接下来就是用tolua++.exe生成用于完成“导出类到lua”功能的CPP文件了。 tolua ++ .exe - n tclass o tclass.cpp tclass.pkg 把tclass.h和tclass.cpp加入到工程中。编写驱动代码,调用lua脚本文件。这部分如下: #include lua.hpp #include int tolua_tclass_open(lua_State * ); _tmain( argc, _TCHAR argv[]) ... { lua_State L luaL_newstate(); luaopen_base(L); tolua_tclass_open(L); luaL_dofile(L,0);">../scripts/classtest.lua); lua_close(L); ; } 编写lua脚本文件classtest.lua,内容如下: print( Now in classtest.lua! ) -- new a CNumber Object print( Now allocate a CNumber Object: ) num = CNumber: () num2 ( 222 ) print( init, num: ..num:GetNumber()) print( ..num2:GetNumber()) print( Now call SetNumber(6) ) num:SetNumber( 6 Now the num: ..num:GetNumber()); num:delete() print( num is deleted, access GetNumber is invalID! invalID call, result: ..num:GetNumber()) a cmessage Object msg cmessage: () print( init msg: ..msg:GetMessage()) print( Now change the msg by call msg:SetMessage('changed message') ) msg:SetMessage( changed message Now msg: ..msg:GetMessage()) msg:ShowMessage() msg:delete() print( msg is deleted, access GetMessage is invalID! inivalID call,0);">..msg:GetMessage()) OK,简单的几步工作,我们已经可以在lua中使用C++类了。有两点要注意: 1.pkg文件要包含实际的C头文件。 2.pkg文件中要声明需要导出到lua中的类,类名与实际的C头文件中的一样,只声明你想导出的部分即可。 总结 以上是内存溢出为你收集整理的tolua++初探(三)全部内容,希望文章能够帮你解决tolua++初探(三)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
评论列表(0条)