lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


Hmmm.
How do I create a labeled table from within c++ for lua?
I've got the members added by using a function array and the table should
pass in the id which can referenced through the array, but I don't know how
to register the table from c++ for lua with a given name (functions no
sweat, using closures).
----- Original Message -----
From: "Gary Makin" <garym@ssg.com.au>
To: "Multiple recipients of list" <lua-l@tecgraf.puc-rio.br>
Sent: Monday, June 17, 2002 6:02 PM
Subject: Re: C++ creation of object, and Lua co-calling


> You're right there. I'm using the ID field in the table to get to the C++
> object, but that's because I'm using STL, and it encourages copying
objects
> around and not using pointers.
>
> If you are using pointers, it would be easy enough to stick the pointer as
a
> userdata in the table, and to use that. Once you did, the static routine
> would be able to access all the fields in the class (as it's a member of
the
> class and has access privileges) but you'd need to preface them all with
> object->
>
>
> On 17/6/02 17:52, "Robert Sadedin" <serenity@nosubstancesoftware.com>
wrote:
>
> > What's the advantage of using this method over exposing straight
functions?
> > Or have I got something very wrong?
> > A static member function can't access the variables within a class, so
with
> > my limited understanding this doesn't seem to help expose the methods of
the
> > c++ object?
> > I do rather think I am wrong though :).
> >
> > ----- Original Message -----
> > From: "Gary Makin" <garym@ssg.com.au>
> > To: "Multiple recipients of list" <lua-l@tecgraf.puc-rio.br>
> > Sent: Monday, June 17, 2002 5:50 PM
> > Subject: Re: C++ creation of object, and Lua co-calling
> >
> >
> >> I think this answers the question you're asking:
> >>
> >> The C++ function you make available to Lua must be a static member
> > function.
> >> I really should have mentioned this. In Lua, I call the function using
the
> > :
> >> operation, so it sticks a copy of the object on the stack. From that I
> > grab
> >> the ID, and that allows me to get at the C++ object.
> >>
> >> Gary
> >>
> >>
> >> On 17/6/02 17:08, "Robert Sadedin" <serenity@nosubstancesoftware.com>
> > wrote:
> >>
> >>> Hmmm.  Interesting, and cool.  How do you store a reference to the
> > methods
> >>> in a class?
> >>> I can store a pointer to an object no sweat, but I don't know how to
> > call a
> >>> method relating to that object without adding to lua to handle
pointers
> > to a
> >>> specific class method.
> >>>
> >>> ----- Original Message -----
> >>> From: "Gary Makin" <garym@ssg.com.au>
> >>> To: "Multiple recipients of list" <lua-l@tecgraf.puc-rio.br>
> >>> Sent: Monday, June 17, 2002 1:33 PM
> >>> Subject: Re: C++ creation of object, and Lua co-calling
> >>>
> >>>
> >>>> I think the solution depends on just what you want to do. For my
> > project,
> >>>> I've decided to forego using tolua, and to do it all manually.
> >>>>
> >>>> I've got a bunch of different C++ classes, and objects of those
> > classes,
> >>> and
> >>>> I wanted to have parallel objects available in Lua. I ended up
putting
> > a
> >>>> routine in each class to create the Lua object for each C++ object.
> >>>>
> >>>> The code creates a new Lua table, and gets a reference to it (telling
> > Lua
> >>>> not to garbage collect the table). The reference is stored in the C++
> >>>> object, and I use that whenever C++ needs to access Lua.
> >>>>
> >>>> In the Lua table I've added a read-only ID entry that I use to find
the
> >>> C++
> >>>> object (I'm using STL, so pointers and iterators aren't always safe
to
> >>>> store).
> >>>>
> >>>> For each method, or data item, that I want to have accessible from
Lua,
> >>> I've
> >>>> added a table entry for the C++ routine. Of course, these C++
routines
> >>> need
> >>>> different parameters than a C++ only routine would need, so I've
tended
> > to
> >>>> end up with two versions of a lot of the routines, with one calling
the
> >>>> other.
> >>>>
> >>>> I've also added some inheritance, so I'm making a single table that's
> > the
> >>>> parent for all the tables of one class. For example, I've got one
> > master
> >>>> Ruin table that is the parent for all the Ruin tables that represent
> > real
> >>>> Ruins in the game. I've added all the common methods to the parent
> > Ruin,
> >>> so
> >>>> I don't need to have copies of all the functions in all the ruins, or
> >>> copies
> >>>> of pointers for C++ functions (as I'm using Lua functions to be
called
> > fro
> >>> m
> >>>> Lua whenever possible).
> >>>>
> >>>> As a caveat, I've only got this working in the last week, so I don't
> > have
> >>> a
> >>>> fully working game using this, but it seems like the system will hold
> > up.
> >>>>
> >>>> Gary Makin
> >>>> Lead Programmer
> >>>> Strategic Studies Group
> >>>>
> >>>>
> >>>> On 17/6/02 6:55, "Robert Sadedin" <serenity@nosubstancesoftware.com>
> >>> wrote:
> >>>>
> >>>>> For my game scripting, I need to be able to expose methods from
> > objects
> >>>>> created in my c++ class to Lua.
> >>>>>
> >>>>> I know there are a number of solutions for providing c++ classes in
> > lua
> >>> so
> >>>>> long as they are created in Lua, but what about when the
construction
> > is
> >>> in
> >>>>> the host application?
> >>>>>
> >>>>> Essentially, I need method sharing with the creation process being
> >>>>> consumated by the c++ app.
> >>>>>
> >>>>> What is the simplest, and least ambitious method for doing this that
> > you
> >>>>> experts can think of?
> >>>>>
> >>>>>
> >>>>> Thanks,
> >>>>>
> >>>>>
> >>>>>
> >>>>> Rob
> >>>>>
> >>>>
> >>>
> >>
> >
>
>