LuaPlus是Lua的C++增强
?
LuaPlus是Lua的C++增强,也就是说,LuaPlus本身就是在Lua的源码上进行增强得来的。用它与C++进行合作,是比较好的一个选择。
LuaPlus目前版本为:LuaPlus for Lua 5.01 Distribution Build 1080 (February 28,2004)。大家可以到 http://luaplus.org/ 站点下载: 源码?? ( http://wwhiz.com/LuaPlus/LuaPlus50_Build1081.zip) 目标码 ( http://wwhiz.com/LuaPlus/LuaPlus50_Build1081_Win32Binaries.zip) 介绍LuaPlus: 好用的Lua For C++扩展????? 沐枫网志 我将在下面说明,如何使用LuaPlus,以及如何更方便的让LuaPlus与C++的类合作无间。 1. 调用Lua脚本 ?
????
//
?创建Lua解释器:
????LuaStateOwner?state;? ???? ???? ?执行Lua脚本: ????state -> DoString( " print('Hello?World/n') ); ???? ?载入Lua脚本文件并执行: DoFile( C:/test.lua ?载入编译后的Lua脚本文件并执行: C:/test.luac ); 2. 与Lua脚本互相调用 ?为Lua脚本设置变量
GetGlobals().SetNumber(
myvalue
,?
123456
?获得Lua变量的值
int
?myvalue?
=
?state
GetGlobal(
).GetInteger();
???? ???? ?调用Lua函数 ????LuaFunction < > ?luaPrint? print ); ????luaPrint( Hello?World/n ); ???? ???? ?让Lua调用C语言函数 ?add( ?a,0)">?b) {?return?a+b;} ????state GetGlobals().RegisterDirect( add ????state print(add(3,4)) ?让Lua调用C++类成员函数 class ?Test {public:?int?add(?b)b;}} ; ????Test?test; ????state ); ??? ?下面是一个简单的C++类:????
?
?Logger
? { ?: ??void?LOGMEMBER(const?char*?message) ??{ ???printf("In?member?function:?%s/n??} ? ??Logger() ??Constructing(%p)/nthis); ???v?=10; ??} ??virtual~Logger() ??Destructing(%p)/n); ??} ? ??Logger(?n) ???--?Constructing[%d](%p)/n ??Logger(Logger?logger) ???--?Constructing[%p](%p)/n); ???logger->LOGMEMBER(?Call?From?Constructor/n?SetValue(?val) ??{ ???v??val; ??}?GetValue() ??{ ????v; ??} ??v; ?} ; ? ?导入到Lua脚本:
????LuaClass
Logger
(state)
???????.create( )? ?定义构造函数?Logger::Logger() ???????.create ( Logger2 )?? ?定义构造函数?Logger::Logger(int) *> Logger3 ?定义构造函数?Logger::Logger(Logger*) ?????? ?.destroy( Free ?定义析构函数?Logger::~Logger() ???????.destroy( __gc ???????.def( lm & Logger::LOGMEMBER)?? ?定义成员函数?Logger::LOGMEMBER(const?char*) SetValue Logger::SetValue) ???????.def( GetValue Logger::GetValue); ? ?在Lua中使用Logger类(1):
DoString(
???????? l?=?Logger(); ?? ?调用构造函数?Logger::Logger() ???????? l:lm('Hello?World?1'); ?调用成员函数?Logger::LOGMEMBER(const?char*) l:Free(); ?调用析构函数?Logger::~Logger() ????????); ? ?在Lua中使用Logger类(2):
m?=?Logger(10);
?调用构造函数?Logger::Logger(int)
m:lm('Hello?World?2');
n?=?Logger(m);
?调用构造函数?Logger::Logger(Logger*)
n:lm('Hello?World?3');
m:SetValue(11);
???????? print(m.GetValue()); m,n?=?nil,?nil; ?m,n?将由Lua的垃极回收来调用析构函数 ????????); 4. 将一组C函数归类到Lua模块 ? 同上面一样,我采用LuaPlusHelper.h来简化:
????LuaModule(state,0)">mymodule
)
???????.def( ???????.def( add2 ? ????state print(mymodule.add(3,4)); print(mymodule.add2(3,0)"> ????????); 5. 使用Lua的Table数据类型 ?在Lua中创建Table
????LuaObject?table?
GetGlobals().CreateTable(
mytable
);
????table.SetInteger( m 10 ); ????table.SetNumber( f 1.99 ); ????table.SetString( s Hello?World ); ????table.SetWString( ch 你好 1 What ?相当于Lua中的: ???? ?mytable?=?{m=10,?f=1.99,?s="Hello?World",?ch=L"你好",?"What"} ?? ?也可以使用table作为key和value:
nexttable
)
????????.SetString(table,0)">Hello ) ????????.SetObject( obj ???? ?nexttable?=?{mytable="Hello",?obj=mytable} ? 获得Table的内容:
????LuaObject?t2?
GetGlobals(
?m?
?t2.GetByName(
).GetInteger();
???? ????LuaObject?t3? ); ????std:: string ?str? ?t3.GetByObject(t2).GetString(); ??? ? ?LuaStateOwner?state;
?state.DoString(? MyTable?=?{?Hi?=?5,?Hello?=?10,?Yo?=?6?} ?); ? ?LuaObject?obj? ?state.GetGlobals()[? MyTable ?]; ? for ?(?LuaTableIterator?it(?obj?);?it;?it.Next()?) ? { ??????key??it.GetKey().GetString(); ??????num??it.GetValue().GetInteger(); ?} 篇尾 上面我只是简单的举一些例子来说明LuaPlus以及LuaPlusHelper的使用方法,具体文档请参见LuaPlus。 需要下载LuaPlusHelper,请点这里:
标签:
C++??
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |