tolua++初探(三)

前端之家收集整理的这篇文章主要介绍了tolua++初探(三)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
 <将简单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);">256
CMessage()

    
 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 
 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头文件中的一样,只声明你想导出的部分即可。

猜你在找的Lua相关文章