Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ LuaRef数据的Luabridge弱参考_C++_Data Binding_Lua_Luabridge - Fatal编程技术网

C++ LuaRef数据的Luabridge弱参考

C++ LuaRef数据的Luabridge弱参考,c++,data-binding,lua,luabridge,C++,Data Binding,Lua,Luabridge,考虑以下示例: function Process() local Container=NewContainer() Container:On(EventType.Add,function() Container:DoSomething() end) -- Does not Garbage Collect end 在luabridge中,我将函数()存储为LuaRef,它延长了容器的生存期,它不会被GCed,因为它是RefCountedObject

考虑以下示例:

function Process()
    local Container=NewContainer()
    Container:On(EventType.Add,function()
        Container:DoSomething()
    end)
    -- Does not Garbage Collect
end
在luabridge中,我将
函数()
存储为
LuaRef
,它延长了
容器的生存期
,它不会被GCed,因为它是
RefCountedObjectPtr

这里有一个变通方法,我用它来使用一个弱表,但它看起来很难看:

function Process()
    local Container=NewContainer()
    local ParamsTable={ Container=Container }
    setmetatable(ParamsTable, { __mode = 'k' })

    Container:On(EventType.Add,function()
        ParamsTable.Container:DoSomething()
    end)
    -- Garbage Collects fine
end

有没有办法让LuaRef的功能与此类似?或者可能还有其他解决方法?

以下是我处理此问题的方法:

在C++ LuabReCH类上创建包装类(如果在C++中有<代码>类显示.a())/c> >,在Lua中创建类<代码>()<代码> >
  • 在该包装类中存储弱表(
    self.WeakTable={}
    setmetatable(self.WeakTable,{{uuu mode='k'})
  • 在弱表中,引用self:(
    self.WeakTable.self=self
  • >将代码>自已.BabyTabe<代码>为C++,并存储在As<代码> LuaReF中-这将GC/
  • 创建一个包装函数,如下所示:

    Container:On(EventType.Add,function(WeakTableParams) 
       WeakTableParams.self.Callback();
    end)
    

  • 如果你接受自己的答案,你会让更少的人看你的问题。以后你还是可以接受的。