variable rand_max rand pointer libreria example c++ data-binding lua luabridge

c++ - rand_max - Referencia débil de Luabridge a los datos de LuaRef



strstr c++ (1)

Considere el siguiente ejemplo:

function Process() local Container=NewContainer() Container:On(EventType.Add,function() Container:DoSomething() end) -- Does not Garbage Collect end

En luabridge, almaceno la function() como LuaRef que extiende la vida útil del Container y no será GCed porque es un RefCountedObjectPtr

Aquí hay una solución que utilizo para usar una tabla débil que funciona, pero se ve fea:

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

¿Hay alguna manera de tener un LuaRef que funcione de manera similar a esto? O tal vez hay otra solución?


Esta es la forma en que abordo este problema:

  1. Cree una clase contenedora alrededor de la clase C + + luabridge (si tiene la class Display.A() en C ++, cree la clase A() en Lua)
  2. Almacene una tabla débil dentro de esa clase contenedora ( self.WeakTable={} y setmetatable(self.WeakTable, { __mode = ''k'' }) )
  3. En la tabla débil, referencia propia: ( self.WeakTable.self=self )
  4. Pase self.WeakTable a C ++ y almacénelo como LuaRef - esto lo hará gc
  5. Crea una función de contenedor así:

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