2010-05-19 62 views
0

我正在努力解决我之前遇到的一个问题。SWIG-Lua关于返回另一个班级的问题

我在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; 
    } 

} 

我换这两个类痛饮这样我就可以访问它们在Lua

这样我就可以在Lua获取对象X =波莫纳.tree(grannysmithm)

我现在的问题是:我如何安排事情,所以,当我键入Y = X:getfruit()我会得到一个波莫纳:水果类型的对象?我在哪里可以写点东西y:getseedcount()? 目前我所得到的是不可食用的userdata。

回答

1

如果你呷.i文件设置正确,你可以用 “:” 运营商:

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

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

如果这不起作用,您需要告诉SWIG如何使用.i文件中的类型映射将水果*输出参数转换为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); 
}