tolua++初探(三)

tolua++初探(三),第1张

概述 <将简单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);">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头文件中的一样,只声明你想导出的部分即可。 总结

以上是内存溢出为你收集整理的tolua++初探(三)全部内容,希望文章能够帮你解决tolua++初探(三)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1268944.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-08
下一篇2022-06-08

发表评论

登录后才能评论

评论列表(0条)

    保存