关于返回另一个班级的SWIG-Lua问题

时间:2010-05-19 02:02:00

标签: c++ lua swig

我正在调整我之前的问题。

我在C ++中有两个类,我使用SWIG来包装它们。一个类中的方法可以返回指向另一个类的指针。我怎样才能让Lua看到它不仅仅是一个用户数据?

更具体地说:

我有

class fruit
{
     int numberofseeds;
  //some other stuff about fruit constructors etc...
   public:
     getseedcount()
     {
        return numberofseeds;
     }
}

class tree
{
    fruit * apple; 
    public:
      //constructors and whatnot
    fruit * getfruit()
    {
         return apple;
    }

}

我用SWIG封装了这两个类,所以我可以在Lua中访问它们

所以我可以在Lua中找到对象 x = pomona.tree(grannysmith)

我现在的问题是:我如何安排事情,这样当我输入 y = x:getfruit()时,我会得到一个 pomona:fruit 类型的对象?在哪里我可以写一些行 y:getseedcount()? 目前,我得到的是用户数据,这是不可食用的。

1 个答案:

答案 0 :(得分:1)

如果您的SWIG .i文件设置正确,您可以使用“:”运算符:

local y = x:getfruit()
local z = y:getseedcount()

请参阅SWIG Lua documentation的“类”部分(23.2.7)。

如果这不起作用,您需要告诉SWIG如何使用.i文件中的类型映射将fruit * out参数转换为Lua表示。类似的东西:

%typemap(out) fruit*
{
    swig_module_info* module = SWIG_GetModule(L);
    swig_type_info* typeInfo = SWIG_TypeQueryModule(module, module, "fruit *");

    SWIG_NewPointerObj(L, $1, typeInfo, 1);
}