C++优雅之旅

探索C++

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  15 随笔 :: 0 文章 :: 20 评论 :: 0 Trackbacks

     刚开始使用luabind,对一些基本的使用有些了解,记录下来以备查阅。这篇文章里主要讨论如何在C++中访问lua脚本中的变量,函数。
     假设有一个test.lua脚本,内容如下:

 1--test.lua
 2
 3function printColor()
 4    colour = ColourValue(1111);
 5    colour:printColor();
 6end
 7
 8Config = 
 9{
10    color = ColourValue(1111),
11    count = 5,
12    fun = printColor
13
14}

     ColourValue是C++类,定义如下:
 1class ColourValue
 2{
 3public:
 4    ColourValue(float r = 1.0,
 5                float g = 1.0,
 6                float b = 1.0,
 7                float a = 1.0) : mR(r), mB(b), mG(g), mA(a)
 8    {
 9    }

10
11    void printColor()
12    {
13        cout << mR << ""
14             << mG << ""
15             << mB << ""
16             << mA << "" 
17             << endl;
18    }

19
20protected:
21    float mR;
22    float mG;
23    float mB;
24    float mA;
25}
;

     C++导出类到lua中可以见之前的一篇文章(点这里),就不再赘述,假设ColourValue和它的成员函数printColor()已经导出到lua,那么如何在C++中访问Config表中的变量呢?这里就要用到luabind中的globals(lua_State* L)函数

    这个函数返回的是全局表,表中包含加载的lua脚本中所有的变量,下面依次讲解如何来获取Config表中的三个变量。
1// 取得全局表对象。
2luabind::object global = luabind::globals(L);
    
    lua脚本中的所有元素都是放在这个全局表中的,所以可以用lua table的语法来访问其中的元素:
1// 获取脚本中的Config表。
2luabind::object configTable = global["Config"];
    
    这样,就可以通过configTable访问Config表中的元素了:
    ①访问color:
1// 访问Config表中的color。
2ColourValue color = luabind::object_cast<ColourValue>(configTable["color"]);
     注意,这里有一个转型动作,因为ColorValue类已经导入到lua中,所以luabind知道如何转换,否则,转换将发生异常。
   
    ②访问count:
1// 访问Config表中count。
2int count = luabind::object_cast<int>(configTable["count"]);
     有了之前的讲述,这个应该很好理解了。

     ③访问printColor:
1// 访问Config表中的printColor函数。
2luabind::object printColor = configTable["fun"];
     在C++代码中调用printColor有两种方法:
    
1printColor();                                      // 第一种调用方法。
2luabind::call_function<void>(printColor); // 第二种调用方法。
    注意第二种调用方法使用了call_function函数的重载形式。

     如果要访问全局表中的变量,方法是一样的,只不过是使用globle句柄进行访问,这里就不再赘言。
posted on 2010-05-15 01:40 林公子 阅读(2917) 评论(0)  编辑 收藏 引用 所属分类: Lua

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理