您的位置:首页 > 编程语言 > Lua

让 lua 调用 C++ 中的 member functions

2009-10-21 12:41 351 查看
最近学习了一下 lua 的内容,觉得很是不错。为了使 C++ 和 Lua 之间能够互相访问,可以使用的库是比较多的,但多数比较麻烦。

 

见过一个 project 使用的是 luabind,之前还一直不明白怎么看不明白程序的结构。

 

为了能够用 lua 调用 C++ 中的函数,就必须用 lua 的库函数进行注册,最简单直接的就是用 lua_register。

 

注册之后,需要维护一系列的函数组成的表。这里可以使用 lua 提供的表功能进行维护,那就需要注册很多的函数。

 

也可以用 C++ 中维护类似的表,这用就只需要注册一个 lua 的函数,提供多个入口。

 

对于写惯了 C++ 代码的人来说,后一种比较自如一些。

 

要调用非静态的类成员函数,如何把 C++ 的对象指针传递给 lua 呢?这是一个严重的问题。

 

目前,还没有找到比较合适的解决方案。

 

现在的做法是在 C++ 中传递指针,回避 lua 和 C++ 传递指针的问题。

 

===================================

 

传递指针和维护调用函数表是必须的,但是可以借助 C++ Template,使 Client 部分代码尽量简洁明了。

 

主要是用 Functor 功能,再把函数和类函数成员整合到一起。

 

这样处理后的代码:

 

//----------------------------------------------------------------------------------------

 

USui * p =  USui::instance();

p->insert("ShowTestButton", makeFunctor(*this, &UMyWindow::showTestButton));

p->doFile("cfg.lua");

 

//----------------------------------------------------------------------------------------

 

 

lua 代码如下:

 

 

----------------------------------------------------------------------------------------

 

-- hide the test button

USui_Event("ShowTestButton", true)

 

----------------------------------------------------------------------------------------

此外,luaplus 提供了完整的解决方案,可以研究一下:

 
http://wwhiz.com/LuaPlus/LuaPlusCallDispatcher.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  lua c++ functor c