Re: Member pointers in 0.8.1
Tony Kostanjsek <[email protected]>
| Newsgroups | gmane.comp.lang.lua.bind.user |
|---|---|
| Message-ID | <[email protected]> |
Marcus, awesome! That should go into the official docs for slow people like me. I remember vaguely thinking about a similar solution, but back then I think we didn't want to include lua/luabind in all of the classes that needed to be bound, but that requirement changed over time. Also, I didn't get the raw_ policy at all :) I assume, this would work just as fine for returning shared_ptr using shared_from_this ? Daniel, thanks for the heads up on the downcasts! best, Tony ________________________________ Von: Marcus Speight <[email protected]> An: [email protected] Gesendet: Freitag, den 24. April 2009, 19:22:31 Uhr Betreff: Re: [luabind] Member pointers in 0.8.1 Define function to accept the raw state .def("GetObject", (luabind::object(Manager::*)(Name&, lua_State*)) &Manager::GetObjectByName, raw(_2)) In you base object class add a virtual function called asLua class Object { ... virtual luabind::object asLua(lua_State *L) = 0; }; The new GetObjectByName function calls the one you already have then calls the new asLua function luabind::object Manager::GetObjectByName(Name& n, lua_State *L) { Object *obj = GetObjectByName(n); return obj->asLua(L); } In derived classes override the asLua function class Camera { ... virtual luabind::object asLua(lua_State *L) { return luabind::object(this, L); } }; The result is the function returns a derived type. local l_camera = Manager::GetObject(Name("Camera")); l_camera is of type Camera. > Date: Fri, 24 Apr 2009 17:19:28 +0000 > From: [email protected] > To: [email protected] > Subject: Re: [luabind] Member pointers in 0.8.1 > > > I'd be interested in a solution for this as well. What we did as a workaorund was to add cast functions to the lua bindings for the derived classes, so you have to know that (in Lua) you receive a Object* and then convert like this: local actor = Actor.cast(myobject). > It does feel wrong to introduce casts like this to a dynamic language, but at least it works. Ultimately, we rewrote part of our project specifically because of these problems and reimplemented some of the classes in pure lua. > I really wish luabind was more intelligent and forgiving when it comes to (smart)pointer casts and general usage. > Best, > Tony > > > ----- Ursprüngliche Mail ---- > Von: hymedia <[email protected]> > An: [email protected] > Gesendet: Freitag, den 24. April 2009, 19:04:53 Uhr > Betreff: Re: [luabind] Member pointers in 0.8.1 > > Greetings, > > This might be a no can do but you wizards out there might have an hocus > pocus workarounds... > > Let say the basic function is define like this: > > .def("GetObject", (Object*(Manager::*)(Name &)) &Manager::GetObjectByName) > > All good, the Manger return an Object, but many classes derived from Object > in my C++ and my Luabind Modules follow the same structure. In c++ you can > statically cast to the desired type... Is there a way to static cast a > Luabind return value within a Lua script? > > Something like: > > local l_camera = (Camera*) Manager:GetObject(Name("Camera")); > > > This would work But it is not really sexy... > > .def("GetActor", (Actor*(Manager::*)(Name &)) &Manager::GetObjectByName) > .def("GetCamera", (Camera*(Manager::*)(Name &)) &Manager::GetObjectByName) > > thx > > -----Original Message----- > From: Ilia Trendafilov [mailto:[email protected]] > Sent: Tuesday, April 14, 2009 3:07 PM > To: [email protected] > Subject: Re: [luabind] Member pointers in 0.8.1 > > Problem solved! Thanks! > > On Mon, Apr 13, 2009 at 10:16 PM, Daniel Wallin <[email protected]> wrote: > > Ilia Trendafilov wrote: > >> James Porter wrote: > >>> Your code works for me in Luabind 0.8.1 / Lua 5.1.4 / MSVC8 SP1 with no > >>> problems whatsoever. Is your version of Lua up to date, and did you > >>> compile Luabind via bjam? > > > > Really? That's weird. It fails for me on GCC 4.3.2 as well. > > > >> Since you can run the code, it seems that I'm doing something wrong, > >> but I don't have a clue what it might be. Not sure if that's relevant, > >> boost version is 1.37 on Windows and 1.38 on Linux, built by bjam on > >> both OSes. > > > > Can you try this patch, it should solve the problem: > > ... > > Daniel Wallin > > BoostPro Computing > > http://www.boostpro.com > > ---------------------------------------------------------------------------- > -- > This SF.net email is sponsored by: > High Quality Requirements in a Collaborative Environment. > Download a free trial of Rational Requirements Composer Now! > http://p.sf.net/sfu/www-ibm-com > _______________________________________________ > luabind-user mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/luabind-user > > > ------------------------------------------------------------------------------ > Crystal Reports - New Free Runtime and 30 Day Trial > Check out the new simplified licensign option that enables unlimited > royalty-free distribution of the report engine for externally facing > server and web deployment. > http://p.sf.net/sfu/businessobjects > _______________________________________________ > luabind-user mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/luabind-user > > > > > > ------------------------------------------------------------------------------ > Crystal Reports - New Free Runtime and 30 Day Trial > Check out the new simplified licensign option that enables unlimited > royalty-free distribution of the report engine for externally facing > server and web deployment. > http://p.sf.net/sfu/businessobjects > _______________________________________________ > luabind-user mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/luabind-user ________________________________ Share your photos with Windows Live Photos – Free. Try it Now! ------------------------------------------------------------------------------ Crystal Reports - New Free Runtime and 30 Day Trial Check out the new simplified licensign option that enables unlimited royalty-free distribution of the report engine for externally facing server and web deployment. http://p.sf.net/sfu/businessobjects _______________________________________________ luabind-user mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/luabind-user