[tolua++] 永远不要用tolua.type

在使用tolua++时遇到一个偶发性错误,当调用`win:setText`时,出现类型不符的问题。经过排查,发现是tolua++的`tolua_pushusertype`在类型检查时的继承关系判断导致的。通过修改tolua源码注释掉特定代码段解决了问题,但这引入了新的问题,即const类型的判断错误。提出了两种解决方案:不修改tolua++并调整代码,或注释掉继承关系判断并避免导出特定类型函数。
摘要由CSDN通过智能技术生成

先说一下项目,用CEGUI做界面,然后由tolua++导出各种函数给lua使用。

//基类
namespace CEGUI {
class Window{
...
void setText(const String&text, COLOR c=COLOR_BLACK);
}; // end of Window
//StaticText类
class StaticText:public Window
{
}
//ItemCell类
class ItemCell:public Window
{
...
void setText(const String& text);  //实际上此方法会隐藏基类方法
}
...
} //end namespace CEGUI

// lua代码这样写

local win = WindowManager:getWindow("xxx") 

win:setText("text message", COLOR_RED);


一般来讲getWindow返回类型是"CEGUI::Window",但是我们发现在win:setText这行代码,偶发性会报错,概率比较低:

error in function "setText", argument #3 is number;  "[no object] expected". 

尝试把COLOR_RED参数去掉就不报错了。

把win类型用tolua.type(win)打印出来,发现报错的时候类型不是"CEGUI::Window",而是"CEGUI::ItemCell",这就很奇怪了,为什么类型会变呢࿱

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值