Question

This snipped works for basic types:

int CreateBasicObject(lua_State *L)
{
    int ret0;

    lua_pushinteger(L, ret0);

    return 1;
}

and in lua it looks like this:

local NewObject=CreateBasicObject()

How would I go about returning classes instead of ints?

push(L,&MyObject);
return 1;

does not seem to work correctly, lua portion looks like this:

self.MyObject=Screen.MyObject(); 

And the error is:

attempt to index field 'MyObject' (a number value)
Was it helpful?

Solution

In the newest LuaBridge version you can use RefCountedPtr for example:

some C++ definition

struct A {};

static RefCountedPtr<A> SomeA() {
 return RefCountedPtr<A>(new A);
}

and the binding:

luabridge::getGlobalNamespace(L)
  .beginClass<A>("A")
   .addConstructor< void (*) (), RefCountedPtr<A> >()
  .endClass()

  .addFunction("SomeA",&SomeA);

now you can return A objects safely and pass them to other Lua-bound functions as RefCountedPtr<A>

in lua you can then use it like that:

local a=A()
--do something with a...

local b=SomeA()
--do something with b...
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top