我正在调整我之前的问题。
我在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()? 目前,我得到的是用户数据,这是不可食用的。
答案 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);
}