快速业务通道

介绍LuaPlus:好用的Lua For C++扩展

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-29
(Logger*)
.destroy("Free") // 定义析构函数 Logger::~Logger()
.destroy("__gc") // 定义析构函数 Logger::~Logger()
.def("lm", &Logger::LOGMEMBER) // 定义成员函数 Logger::LOGMEMBER(const char*)
.def("SetValue", &Logger::SetValue)
.def("GetValue", &Logger::GetValue);

// 在Lua中使用Logger类(1):
state->DoString(
"l = Logger();"  // 调用构造函数 Logger::Logger()
"l:lm(''Hello World 1'');"  // 调用成员函数 Logger::LOGMEMBER(const char*)
"l:Free();"  // 调用析构函数 Logger::~Logger()
);

// 在Lua中使用Logger类(2):
state->DoString(
"m = Logger2(10);" // 调用构造函数 Logger::Logger(int)
"m:lm(''Hello World 2'');"  // 调用成员函数 Logger::LOGMEMBER(const char*)
"n = Logger3(m);" // 调用构造函数 Logger::Logger(Logger*)
"n:lm(''Hello World 3'');"  // 调用成员函数 Logger::LOGMEMBER(const char*)
"m:SetValue(11);"
"print(m.GetValue());"
"m,n = nil, nil;" // m,n 将由Lua的垃极回收来调用析构函数
);

4. 将一组C函数归类到Lua模块

//同上面一样,我采用LuaPlusHelper.h来简化:
LuaModule(state, "mymodule")
.def("add", add)
.def("add2", test, add);

state->DoString(
"print(mymodule.add(3,4));"
"print(mymodule.add2(3,4));"
);

5. 使用Lua的Table数据类型

// 在Lua中创建Table
LuaObject table = state->GetGlobals().CreateTable("mytable");
table.SetInteger("m", 10);
table.SetNumber("f", 1.99);
table.SetString("s", "Hello World");
table.SetWString("ch", L"你好");
table.SetString(1, "What");

// 相当于Lua中的:
// mytable = {m=10, f=1.99, s="Hello World", ch=L"你好", "What"}

// 也可以使用table作为key和value:
state->GetGlobals().CreateTable("nexttable")
.SetString(table, "Hello")
.SetObject("obj", table);
// 相当于Lua中的:
// nexttable = {mytable="Hello", obj=mytable}

//获得Table的内容:
LuaObject t2 = state->GetGlobals("mytable");
int m = t2.GetByName("m").GetInteger();

LuaObject t3 = state->GetGlobals("nexttable");
std::string str = t3.GetByObject(t2).GetString();

6 遍历Table

LuaStateOwner state;
state.DoString( "MyTable = { Hi = 5, Hello = 10, Yo = 6 }" );

LuaObject obj = state.GetGlobals()[ "MyTable" ];
for ( LuaTableIterator it( obj ); it; it.Next() )
{
const char* key = it.GetKey().GetString();
int num = it.GetValue().GetInteger();
}

篇尾

上面我只是简单的举一些例子来说明LuaPlus以及LuaPlusHelper的使用方法,具体文档请参见LuaPlus.

需要下载LuaPlusHelper,请点这里:

http://files.cnblogs.com/ly4cn/LuaPlusHelper.rar

测试程序(VC7.1):

http://files.cnblogs.com/ly4cn/LuaPlusTest.rar

原文发表于 @ 2008年09月13日

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号