-
Notifications
You must be signed in to change notification settings - Fork 426
代理对象(回调函数)的处理
siney edited this page Mar 6, 2019
·
3 revisions
cppbinding的时候,直接使用TFunction作为回调函数来使用,例如:
void setCallback(const TFunction<void(int)>& func) {
callback = func;
}
void docall() {
callback(1024);
}
TFunction<void(int)> callback;
在lua中可以直接传入luafunction作为回调函数处理
f1:setCallback(function(i) print("callback from cppbinding",i) end)
f1:docall()
如果是蓝图的delegate,slua会导出delegate到lua,代理对象分为多播和单播,他们的使用基本相同,但都需要注意需要移除对应的handle,保证没有内存泄露。
Add(function) 添加一个function作为代理回到函数,返回一个handler
Remove(handler) 移除对应的函数代理
Clear() 清空所有代理
Bind(function) 设置一个function作为代理回到函数,返回一个handler,对应的lua变量被置空后回收内存,但在lua尚未回收时,可能导致回调任然有效。
Clear() 立刻删除代理回调
例如
local Test=import('SluaTestCase');
-- test coroutine
local co = coroutine.create( function()
ccb = slua.createDelegate(function(p)
print("LoadAssetClass callback in coroutine",p)
end)
Test.LoadAssetClass(ccb)
ccb = nil
end )
coroutine.resume( co )