Thread: Re: [luabind] How to get the attributes of a lua class, without their names, using luabind
Brought to you by:
arvidn,
daniel_wallin
From: Pavel K. <pa...@ya...> - 2015-12-11 16:58:00
|
Hi, I don't have such problem (using luabind-deboostified fork). Could you show the code which causes an infinite loop? Which fork do you use? On 12/11/2015 3:00 PM, lua...@li... wrote: > Send luabind-user mailing list submissions to > lua...@li... > > To subscribe or unsubscribe via the World Wide Web, visit > https://lists.sourceforge.net/lists/listinfo/luabind-user > or, via email, send a message with subject or body 'help' to > lua...@li... > > You can reach the person managing the list at > lua...@li... > > When replying, please edit your Subject line so it is more specific > than "Re: Contents of luabind-user digest..." > > > Today's Topics: > > 1. Re: How to get the attributes of a lua class without their > names, using luabind (Crashy) > > > ---------------------------------------------------------------------- > > Message: 1 > Date: Thu, 10 Dec 2015 05:07:38 -0700 (MST) > From: Crashy <jea...@la...> > Subject: Re: [luabind] How to get the attributes of a lua class > without their names, using luabind > To: lua...@li... > Message-ID: <144...@n2...> > Content-Type: text/plain; charset=us-ascii > > Hi ! > > I hate to 'bump' very old topics, but I'm facing the same problem while > writing a lua debugger. > I can access values by name, but using the iterator results in an infinite > loop. > Iterators are doing well when the object is a simple table though, it only > fails when the object is a luabind class. > > Does anybody has a solution to iterate over member variables of a luabind > class ? > > Thanks ! > > > Thibault Ehrhart wrote >> Hello everyone, >> >> I have a Lua class (defined using luabind's 'class' keyword) and I'd like >> to get the value of the attributes defined in Lua, with C++. >> >> In the code below, I've defined a class, created an instance "foo" and set >> a custom attribute "bar" to that instance. Finally, I am calling a C++ >> function which has to print the attributes of the instance passed as a >> parameter. >> >> Here's the Lua code : >> >> class 'MyLuaClass' >> function MyLuaClass:__init() end >> >> foo = MyLuaClass() >> foo.bar = "baz"; >> PrintAttributes(foo); >> >> And now the C++ code of the PrintAttributes function, obj is a class >> instance: >> >> void PrintAttributes(luabind::object &obj) >> { >> // Direct access works >> std::cout << obj["bar"] << std::endl; // Will print "baz" :-) >> >> // But what if I don't know the name of the variable(s)? >> for (luabind::iterator it(obj); it != luabind::iterator(); ++it) >> { >> // Doesn't work since obj is an userdata >> } >> } >> >> I've also tried to use class_info but it only works with properties >> defined >> in a C++ class. Is there a way to access those defined with Lua? >> >> Regards, > > > > > > -- > View this message in context: http://lua.2524044.n2.nabble.com/How-to-get-the-attributes-of-a-lua-class-without-their-names-using-luabind-tp7654070p7670726.html > Sent from the Lua C++ Bind mailing list archive at Nabble.com. > > > > ------------------------------ > > ------------------------------------------------------------------------------ > > > ------------------------------ > > _______________________________________________ > luabind-user mailing list > lua...@li... > https://lists.sourceforge.net/lists/listinfo/luabind-user > > > End of luabind-user Digest, Vol 94, Issue 1 > ******************************************* > > -- Best regards, Pavel Kovalenko. |
From: Pavel K. <pa...@ya...> - 2015-12-12 13:48:40
|
This example works for me (but I use another fork: https://github.com/decimad/luabind-deboostified) lua code: local obj = {} obj.foo = function (self) puts("obj:foo") end obj.data = 42 dump_object(obj) cpp code: void dump_object(const luabind::object &obj) { for (luabind::iterator it(obj), end; it!=end; it++) { auto s = object_cast<std::string>(it.key()); puts(s.c_str()); } } What kind of lua object are you trying to iterate over? On 12/12/2015 0:23 AM, jean-baptiste griffo wrote: > Hi, > > Well it's weird but I don't remember the exact fork I'm using, I think I > use this one > https://github.com/mrsharpoblunto/LHP/tree/master/luabind-0.7/include/luabind > I do not use the official release because I had some problems related to > size_t & x64 builds, and this fork solved it. > > Here is the c++ code, please note that at this point I'm 100% sure the > object on the stack is the "self" of my class instance > > //get the luabind object from the stack > luabind::object o(luabind::from_stack(L, lastIndex)); > > for (luabind::iterator i(o), end; i != end; ++i) > { > try > { > std::string strKey = luabind::object_cast<std::string>(i.key()); > printf("%s\n",strKey.c_str()); > } > catch(luabind::cast_failed & e) > { > printf("error\n"); > } > } > > ---------- > > As a result, it simply prints "error" indefinitely. > > Thanks. > > > On 11/12/2015 17:57, Pavel Kovalenko wrote: >> Hi, >> >> I don't have such problem (using luabind-deboostified fork). Could you >> show the code which causes an infinite loop? Which fork do you use? >> >> On 12/11/2015 3:00 PM, luabind-user-request@... wrote: >>> Send luabind-user mailing list submissions to >>> luabind-user@... >>> >>> To subscribe or unsubscribe via the World Wide Web, visit >>> https://lists.sourceforge.net/lists/listinfo/luabind-user >>> or, via email, send a message with subject or body 'help' to >>> luabind-user-request@... >>> >>> You can reach the person managing the list at >>> luabind-user-owner@... >>> >>> When replying, please edit your Subject line so it is more specific >>> than "Re: Contents of luabind-user digest..." >>> >>> >>> Today's Topics: >>> >>> 1. Re: How to get the attributes of a lua class without their >>> names, using luabind (Crashy) >>> >>> >>> ---------------------------------------------------------------------- >>> >>> Message: 1 >>> Date: Thu, 10 Dec 2015 05:07:38 -0700 (MST) >>> From: Crashy <jean-baptiste.griffo@...> >>> Subject: Re: [luabind] How to get the attributes of a lua class >>> without their names, using luabind >>> To: luabind-user@... >>> Message-ID: <1449749258848-7670726.post@...> >>> Content-Type: text/plain; charset=us-ascii >>> >>> Hi ! >>> >>> I hate to 'bump' very old topics, but I'm facing the same problem while >>> writing a lua debugger. >>> I can access values by name, but using the iterator results in an infinite >>> loop. >>> Iterators are doing well when the object is a simple table though, it only >>> fails when the object is a luabind class. >>> >>> Does anybody has a solution to iterate over member variables of a luabind >>> class ? >>> >>> Thanks ! >>> >>> >>> Thibault Ehrhart wrote >>>> Hello everyone, >>>> >>>> I have a Lua class (defined using luabind's 'class' keyword) and I'd like >>>> to get the value of the attributes defined in Lua, with C++. >>>> >>>> In the code below, I've defined a class, created an instance "foo" and set >>>> a custom attribute "bar" to that instance. Finally, I am calling a C++ >>>> function which has to print the attributes of the instance passed as a >>>> parameter. >>>> >>>> Here's the Lua code : >>>> >>>> class 'MyLuaClass' >>>> function MyLuaClass:__init() end >>>> >>>> foo = MyLuaClass() >>>> foo.bar = "baz"; >>>> PrintAttributes(foo); >>>> >>>> And now the C++ code of the PrintAttributes function, obj is a class >>>> instance: >>>> >>>> void PrintAttributes(luabind::object &obj) >>>> { >>>> // Direct access works >>>> std::cout << obj["bar"] << std::endl; // Will print "baz" :-) >>>> >>>> // But what if I don't know the name of the variable(s)? >>>> for (luabind::iterator it(obj); it != luabind::iterator(); ++it) >>>> { >>>> // Doesn't work since obj is an userdata >>>> } >>>> } >>>> >>>> I've also tried to use class_info but it only works with properties >>>> defined >>>> in a C++ class. Is there a way to access those defined with Lua? >>>> >>>> Regards, >>> >>> >>> >>> >>> -- >>> View this message in context: http://lua.2524044.n2.nabble.com/How-to-get-the-attributes-of-a-lua-class-without-their-names-using-luabind-tp7654070p7670726.html >>> Sent from the Lua C++ Bind mailing list archive at Nabble.com. >>> >>> >>> >>> ------------------------------ >>> >>> ------------------------------------------------------------------------------ >>> >>> >>> ------------------------------ >>> >>> _______________________________________________ >>> luabind-user mailing list >>> luabind-user@... >>> https://lists.sourceforge.net/lists/listinfo/luabind-user >>> >>> >>> End of luabind-user Digest, Vol 94, Issue 1 >>> ******************************************* >>> >>> > -- Best regards, Pavel Kovalenko. |
From: jean-baptiste g. <jea...@la...> - 2015-12-12 16:40:03
|
This works for me too in such a case, but it fails if the object is a luabind 'class' object, as in the OP message: class 'MyLuaClass' function MyLuaClass:__init() end foo = MyLuaClass() foo.bar = "baz"; PrintAttributes(foo); On 12/12/2015 14:48, Pavel Kovalenko wrote: > This example works for me (but I use another fork: > https://github.com/decimad/luabind-deboostified) > > lua code: > > local obj = {} > obj.foo = function (self) > puts("obj:foo") > end > obj.data = 42 > > dump_object(obj) > > cpp code: > > void dump_object(const luabind::object &obj) > { > for (luabind::iterator it(obj), end; it!=end; it++) > { > auto s = object_cast<std::string>(it.key()); > puts(s.c_str()); > } > } > > What kind of lua object are you trying to iterate over? > On 12/12/2015 0:23 AM, jean-baptiste griffo wrote: >> Hi, >> >> Well it's weird but I don't remember the exact fork I'm using, I think I >> use this one >> https://github.com/mrsharpoblunto/LHP/tree/master/luabind-0.7/include/luabind >> I do not use the official release because I had some problems related to >> size_t & x64 builds, and this fork solved it. >> >> Here is the c++ code, please note that at this point I'm 100% sure the >> object on the stack is the "self" of my class instance >> >> //get the luabind object from the stack >> luabind::object o(luabind::from_stack(L, lastIndex)); >> >> for (luabind::iterator i(o), end; i != end; ++i) >> { >> try >> { >> std::string strKey = luabind::object_cast<std::string>(i.key()); >> printf("%s\n",strKey.c_str()); >> } >> catch(luabind::cast_failed & e) >> { >> printf("error\n"); >> } >> } >> >> ---------- >> >> As a result, it simply prints "error" indefinitely. >> >> Thanks. >> >> >> On 11/12/2015 17:57, Pavel Kovalenko wrote: >>> Hi, >>> >>> I don't have such problem (using luabind-deboostified fork). Could you >>> show the code which causes an infinite loop? Which fork do you use? >>> >>> On 12/11/2015 3:00 PM, luabind-user-request@... wrote: >>>> Send luabind-user mailing list submissions to >>>> luabind-user@... >>>> >>>> To subscribe or unsubscribe via the World Wide Web, visit >>>> https://lists.sourceforge.net/lists/listinfo/luabind-user >>>> or, via email, send a message with subject or body 'help' to >>>> luabind-user-request@... >>>> >>>> You can reach the person managing the list at >>>> luabind-user-owner@... >>>> >>>> When replying, please edit your Subject line so it is more specific >>>> than "Re: Contents of luabind-user digest..." >>>> >>>> >>>> Today's Topics: >>>> >>>> 1. Re: How to get the attributes of a lua class without their >>>> names, using luabind (Crashy) >>>> >>>> >>>> ---------------------------------------------------------------------- >>>> >>>> Message: 1 >>>> Date: Thu, 10 Dec 2015 05:07:38 -0700 (MST) >>>> From: Crashy <jean-baptiste.griffo@...> >>>> Subject: Re: [luabind] How to get the attributes of a lua class >>>> without their names, using luabind >>>> To: luabind-user@... >>>> Message-ID: <1449749258848-7670726.post@...> >>>> Content-Type: text/plain; charset=us-ascii >>>> >>>> Hi ! >>>> >>>> I hate to 'bump' very old topics, but I'm facing the same problem while >>>> writing a lua debugger. >>>> I can access values by name, but using the iterator results in an infinite >>>> loop. >>>> Iterators are doing well when the object is a simple table though, it only >>>> fails when the object is a luabind class. >>>> >>>> Does anybody has a solution to iterate over member variables of a luabind >>>> class ? >>>> >>>> Thanks ! >>>> >>>> >>>> Thibault Ehrhart wrote >>>>> Hello everyone, >>>>> >>>>> I have a Lua class (defined using luabind's 'class' keyword) and I'd like >>>>> to get the value of the attributes defined in Lua, with C++. >>>>> >>>>> In the code below, I've defined a class, created an instance "foo" and set >>>>> a custom attribute "bar" to that instance. Finally, I am calling a C++ >>>>> function which has to print the attributes of the instance passed as a >>>>> parameter. >>>>> >>>>> Here's the Lua code : >>>>> >>>>> class 'MyLuaClass' >>>>> function MyLuaClass:__init() end >>>>> >>>>> foo = MyLuaClass() >>>>> foo.bar = "baz"; >>>>> PrintAttributes(foo); >>>>> >>>>> And now the C++ code of the PrintAttributes function, obj is a class >>>>> instance: >>>>> >>>>> void PrintAttributes(luabind::object &obj) >>>>> { >>>>> // Direct access works >>>>> std::cout << obj["bar"] << std::endl; // Will print "baz" :-) >>>>> >>>>> // But what if I don't know the name of the variable(s)? >>>>> for (luabind::iterator it(obj); it != luabind::iterator(); ++it) >>>>> { >>>>> // Doesn't work since obj is an userdata >>>>> } >>>>> } >>>>> >>>>> I've also tried to use class_info but it only works with properties >>>>> defined >>>>> in a C++ class. Is there a way to access those defined with Lua? >>>>> >>>>> Regards, >>>> >>>> >>>> >>>> -- >>>> View this message in context: http://lua.2524044.n2.nabble.com/How-to-get-the-attributes-of-a-lua-class-without-their-names-using-luabind-tp7654070p7670726.html >>>> Sent from the Lua C++ Bind mailing list archive at Nabble.com. >>>> >>>> >>>> >>>> ------------------------------ >>>> >>>> ------------------------------------------------------------------------------ >>>> >>>> >>>> ------------------------------ >>>> >>>> _______________________________________________ >>>> luabind-user mailing list >>>> luabind-user@... >>>> https://lists.sourceforge.net/lists/listinfo/luabind-user >>>> >>>> >>>> End of luabind-user Digest, Vol 94, Issue 1 >>>> ******************************************* >>>> >>>> |
From: Michael S. <ms...@tu...> - 2015-12-12 17:50:56
|
Is this pseudo-code or are you missing to specify a base class? Am 12.12.2015 um 15:10 schrieb jean-baptiste griffo: > This works for me too in such a case, but it fails if the object is a > luabind 'class' object, as in the OP message: > > class 'MyLuaClass' > function MyLuaClass:__init() end > > foo = MyLuaClass() > foo.bar = "baz"; > PrintAttributes(foo); > > > > On 12/12/2015 14:48, Pavel Kovalenko wrote: >> This example works for me (but I use another fork: >> https://github.com/decimad/luabind-deboostified) >> >> lua code: >> >> local obj = {} >> obj.foo = function (self) >> puts("obj:foo") >> end >> obj.data = 42 >> >> dump_object(obj) >> >> cpp code: >> >> void dump_object(const luabind::object &obj) >> { >> for (luabind::iterator it(obj), end; it!=end; it++) >> { >> auto s = object_cast<std::string>(it.key()); >> puts(s.c_str()); >> } >> } >> >> What kind of lua object are you trying to iterate over? >> On 12/12/2015 0:23 AM, jean-baptiste griffo wrote: >>> Hi, >>> >>> Well it's weird but I don't remember the exact fork I'm using, I think I >>> use this one >>> https://github.com/mrsharpoblunto/LHP/tree/master/luabind-0.7/include/luabind >>> I do not use the official release because I had some problems related to >>> size_t & x64 builds, and this fork solved it. >>> >>> Here is the c++ code, please note that at this point I'm 100% sure the >>> object on the stack is the "self" of my class instance >>> >>> //get the luabind object from the stack >>> luabind::object o(luabind::from_stack(L, lastIndex)); >>> >>> for (luabind::iterator i(o), end; i != end; ++i) >>> { >>> try >>> { >>> std::string strKey = luabind::object_cast<std::string>(i.key()); >>> printf("%s\n",strKey.c_str()); >>> } >>> catch(luabind::cast_failed & e) >>> { >>> printf("error\n"); >>> } >>> } >>> >>> ---------- >>> >>> As a result, it simply prints "error" indefinitely. >>> >>> Thanks. >>> >>> >>> On 11/12/2015 17:57, Pavel Kovalenko wrote: >>>> Hi, >>>> >>>> I don't have such problem (using luabind-deboostified fork). Could you >>>> show the code which causes an infinite loop? Which fork do you use? >>>> >>>> On 12/11/2015 3:00 PM, luabind-user-request@... wrote: >>>>> Send luabind-user mailing list submissions to >>>>> luabind-user@... >>>>> >>>>> To subscribe or unsubscribe via the World Wide Web, visit >>>>> https://lists.sourceforge.net/lists/listinfo/luabind-user >>>>> or, via email, send a message with subject or body 'help' to >>>>> luabind-user-request@... >>>>> >>>>> You can reach the person managing the list at >>>>> luabind-user-owner@... >>>>> >>>>> When replying, please edit your Subject line so it is more specific >>>>> than "Re: Contents of luabind-user digest..." >>>>> >>>>> >>>>> Today's Topics: >>>>> >>>>> 1. Re: How to get the attributes of a lua class without their >>>>> names, using luabind (Crashy) >>>>> >>>>> >>>>> ---------------------------------------------------------------------- >>>>> >>>>> Message: 1 >>>>> Date: Thu, 10 Dec 2015 05:07:38 -0700 (MST) >>>>> From: Crashy <jean-baptiste.griffo@...> >>>>> Subject: Re: [luabind] How to get the attributes of a lua class >>>>> without their names, using luabind >>>>> To: luabind-user@... >>>>> Message-ID: <1449749258848-7670726.post@...> >>>>> Content-Type: text/plain; charset=us-ascii >>>>> >>>>> Hi ! >>>>> >>>>> I hate to 'bump' very old topics, but I'm facing the same problem while >>>>> writing a lua debugger. >>>>> I can access values by name, but using the iterator results in an infinite >>>>> loop. >>>>> Iterators are doing well when the object is a simple table though, it only >>>>> fails when the object is a luabind class. >>>>> >>>>> Does anybody has a solution to iterate over member variables of a luabind >>>>> class ? >>>>> >>>>> Thanks ! >>>>> >>>>> >>>>> Thibault Ehrhart wrote >>>>>> Hello everyone, >>>>>> >>>>>> I have a Lua class (defined using luabind's 'class' keyword) and I'd like >>>>>> to get the value of the attributes defined in Lua, with C++. >>>>>> >>>>>> In the code below, I've defined a class, created an instance "foo" and set >>>>>> a custom attribute "bar" to that instance. Finally, I am calling a C++ >>>>>> function which has to print the attributes of the instance passed as a >>>>>> parameter. >>>>>> >>>>>> Here's the Lua code : >>>>>> >>>>>> class 'MyLuaClass' >>>>>> function MyLuaClass:__init() end >>>>>> >>>>>> foo = MyLuaClass() >>>>>> foo.bar = "baz"; >>>>>> PrintAttributes(foo); >>>>>> >>>>>> And now the C++ code of the PrintAttributes function, obj is a class >>>>>> instance: >>>>>> >>>>>> void PrintAttributes(luabind::object &obj) >>>>>> { >>>>>> // Direct access works >>>>>> std::cout << obj["bar"] << std::endl; // Will print "baz" :-) >>>>>> >>>>>> // But what if I don't know the name of the variable(s)? >>>>>> for (luabind::iterator it(obj); it != luabind::iterator(); ++it) >>>>>> { >>>>>> // Doesn't work since obj is an userdata >>>>>> } >>>>>> } >>>>>> >>>>>> I've also tried to use class_info but it only works with properties >>>>>> defined >>>>>> in a C++ class. Is there a way to access those defined with Lua? >>>>>> >>>>>> Regards, >>>>> >>>>> >>>>> -- >>>>> View this message in context: http://lua.2524044.n2.nabble.com/How-to-get-the-attributes-of-a-lua-class-without-their-names-using-luabind-tp7654070p7670726.html >>>>> Sent from the Lua C++ Bind mailing list archive at Nabble.com. >>>>> >>>>> >>>>> >>>>> ------------------------------ >>>>> >>>>> ------------------------------------------------------------------------------ >>>>> >>>>> >>>>> ------------------------------ >>>>> >>>>> _______________________________________________ >>>>> luabind-user mailing list >>>>> luabind-user@... >>>>> https://lists.sourceforge.net/lists/listinfo/luabind-user >>>>> >>>>> >>>>> End of luabind-user Digest, Vol 94, Issue 1 >>>>> ******************************************* >>>>> >>>>> > > ------------------------------------------------------------------------------ > _______________________________________________ > luabind-user mailing list > lua...@li... > https://lists.sourceforge.net/lists/listinfo/luabind-user |
From: Michael S. <ms...@tu...> - 2015-12-12 18:02:59
|
Nevermind... I will try to reproduce later. And I need to find out what's the use for having these lua-only classes... :) Am 12.12.2015 um 15:10 schrieb jean-baptiste griffo: > This works for me too in such a case, but it fails if the object is a > luabind 'class' object, as in the OP message: > > class 'MyLuaClass' > function MyLuaClass:__init() end > > foo = MyLuaClass() > foo.bar = "baz"; > PrintAttributes(foo); > > > > On 12/12/2015 14:48, Pavel Kovalenko wrote: >> This example works for me (but I use another fork: >> https://github.com/decimad/luabind-deboostified) >> >> lua code: >> >> local obj = {} >> obj.foo = function (self) >> puts("obj:foo") >> end >> obj.data = 42 >> >> dump_object(obj) >> >> cpp code: >> >> void dump_object(const luabind::object &obj) >> { >> for (luabind::iterator it(obj), end; it!=end; it++) >> { >> auto s = object_cast<std::string>(it.key()); >> puts(s.c_str()); >> } >> } >> >> What kind of lua object are you trying to iterate over? >> On 12/12/2015 0:23 AM, jean-baptiste griffo wrote: >>> Hi, >>> >>> Well it's weird but I don't remember the exact fork I'm using, I think I >>> use this one >>> https://github.com/mrsharpoblunto/LHP/tree/master/luabind-0.7/include/luabind >>> I do not use the official release because I had some problems related to >>> size_t & x64 builds, and this fork solved it. >>> >>> Here is the c++ code, please note that at this point I'm 100% sure the >>> object on the stack is the "self" of my class instance >>> >>> //get the luabind object from the stack >>> luabind::object o(luabind::from_stack(L, lastIndex)); >>> >>> for (luabind::iterator i(o), end; i != end; ++i) >>> { >>> try >>> { >>> std::string strKey = luabind::object_cast<std::string>(i.key()); >>> printf("%s\n",strKey.c_str()); >>> } >>> catch(luabind::cast_failed & e) >>> { >>> printf("error\n"); >>> } >>> } >>> >>> ---------- >>> >>> As a result, it simply prints "error" indefinitely. >>> >>> Thanks. >>> >>> >>> On 11/12/2015 17:57, Pavel Kovalenko wrote: >>>> Hi, >>>> >>>> I don't have such problem (using luabind-deboostified fork). Could you >>>> show the code which causes an infinite loop? Which fork do you use? >>>> >>>> On 12/11/2015 3:00 PM, luabind-user-request@... wrote: >>>>> Send luabind-user mailing list submissions to >>>>> luabind-user@... >>>>> >>>>> To subscribe or unsubscribe via the World Wide Web, visit >>>>> https://lists.sourceforge.net/lists/listinfo/luabind-user >>>>> or, via email, send a message with subject or body 'help' to >>>>> luabind-user-request@... >>>>> >>>>> You can reach the person managing the list at >>>>> luabind-user-owner@... >>>>> >>>>> When replying, please edit your Subject line so it is more specific >>>>> than "Re: Contents of luabind-user digest..." >>>>> >>>>> >>>>> Today's Topics: >>>>> >>>>> 1. Re: How to get the attributes of a lua class without their >>>>> names, using luabind (Crashy) >>>>> >>>>> >>>>> ---------------------------------------------------------------------- >>>>> >>>>> Message: 1 >>>>> Date: Thu, 10 Dec 2015 05:07:38 -0700 (MST) >>>>> From: Crashy <jean-baptiste.griffo@...> >>>>> Subject: Re: [luabind] How to get the attributes of a lua class >>>>> without their names, using luabind >>>>> To: luabind-user@... >>>>> Message-ID: <1449749258848-7670726.post@...> >>>>> Content-Type: text/plain; charset=us-ascii >>>>> >>>>> Hi ! >>>>> >>>>> I hate to 'bump' very old topics, but I'm facing the same problem while >>>>> writing a lua debugger. >>>>> I can access values by name, but using the iterator results in an infinite >>>>> loop. >>>>> Iterators are doing well when the object is a simple table though, it only >>>>> fails when the object is a luabind class. >>>>> >>>>> Does anybody has a solution to iterate over member variables of a luabind >>>>> class ? >>>>> >>>>> Thanks ! >>>>> >>>>> >>>>> Thibault Ehrhart wrote >>>>>> Hello everyone, >>>>>> >>>>>> I have a Lua class (defined using luabind's 'class' keyword) and I'd like >>>>>> to get the value of the attributes defined in Lua, with C++. >>>>>> >>>>>> In the code below, I've defined a class, created an instance "foo" and set >>>>>> a custom attribute "bar" to that instance. Finally, I am calling a C++ >>>>>> function which has to print the attributes of the instance passed as a >>>>>> parameter. >>>>>> >>>>>> Here's the Lua code : >>>>>> >>>>>> class 'MyLuaClass' >>>>>> function MyLuaClass:__init() end >>>>>> >>>>>> foo = MyLuaClass() >>>>>> foo.bar = "baz"; >>>>>> PrintAttributes(foo); >>>>>> >>>>>> And now the C++ code of the PrintAttributes function, obj is a class >>>>>> instance: >>>>>> >>>>>> void PrintAttributes(luabind::object &obj) >>>>>> { >>>>>> // Direct access works >>>>>> std::cout << obj["bar"] << std::endl; // Will print "baz" :-) >>>>>> >>>>>> // But what if I don't know the name of the variable(s)? >>>>>> for (luabind::iterator it(obj); it != luabind::iterator(); ++it) >>>>>> { >>>>>> // Doesn't work since obj is an userdata >>>>>> } >>>>>> } >>>>>> >>>>>> I've also tried to use class_info but it only works with properties >>>>>> defined >>>>>> in a C++ class. Is there a way to access those defined with Lua? >>>>>> >>>>>> Regards, >>>>> >>>>> >>>>> -- >>>>> View this message in context: http://lua.2524044.n2.nabble.com/How-to-get-the-attributes-of-a-lua-class-without-their-names-using-luabind-tp7654070p7670726.html >>>>> Sent from the Lua C++ Bind mailing list archive at Nabble.com. >>>>> >>>>> >>>>> >>>>> ------------------------------ >>>>> >>>>> ------------------------------------------------------------------------------ >>>>> >>>>> >>>>> ------------------------------ >>>>> >>>>> _______________________________________________ >>>>> luabind-user mailing list >>>>> luabind-user@... >>>>> https://lists.sourceforge.net/lists/listinfo/luabind-user >>>>> >>>>> >>>>> End of luabind-user Digest, Vol 94, Issue 1 >>>>> ******************************************* >>>>> >>>>> > > ------------------------------------------------------------------------------ > _______________________________________________ > luabind-user mailing list > lua...@li... > https://lists.sourceforge.net/lists/listinfo/luabind-user |
From: jean-baptiste g. <jea...@la...> - 2015-12-13 13:13:13
|
Well they are pretty usefull if you want to inherit from a c++ class. I'm making a game engine and these lua-class are awesome to add new Types to the engine :) On 12/12/2015 18:28, Michael Steinberg wrote: > Nevermind... I will try to reproduce later. > And I need to find out what's the use for having these lua-only > classes... :) > > Am 12.12.2015 um 15:10 schrieb jean-baptiste griffo: >> This works for me too in such a case, but it fails if the object is a >> luabind 'class' object, as in the OP message: >> >> class 'MyLuaClass' >> function MyLuaClass:__init() end >> >> foo = MyLuaClass() >> foo.bar = "baz"; >> PrintAttributes(foo); >> >> >> >> On 12/12/2015 14:48, Pavel Kovalenko wrote: >>> This example works for me (but I use another fork: >>> https://github.com/decimad/luabind-deboostified) >>> >>> lua code: >>> >>> local obj = {} >>> obj.foo = function (self) >>> puts("obj:foo") >>> end >>> obj.data = 42 >>> >>> dump_object(obj) >>> >>> cpp code: >>> >>> void dump_object(const luabind::object &obj) >>> { >>> for (luabind::iterator it(obj), end; it!=end; it++) >>> { >>> auto s = object_cast<std::string>(it.key()); >>> puts(s.c_str()); >>> } >>> } >>> >>> What kind of lua object are you trying to iterate over? >>> On 12/12/2015 0:23 AM, jean-baptiste griffo wrote: >>>> Hi, >>>> >>>> Well it's weird but I don't remember the exact fork I'm using, I think I >>>> use this one >>>> https://github.com/mrsharpoblunto/LHP/tree/master/luabind-0.7/include/luabind >>>> I do not use the official release because I had some problems related to >>>> size_t & x64 builds, and this fork solved it. >>>> >>>> Here is the c++ code, please note that at this point I'm 100% sure the >>>> object on the stack is the "self" of my class instance >>>> >>>> //get the luabind object from the stack >>>> luabind::object o(luabind::from_stack(L, lastIndex)); >>>> >>>> for (luabind::iterator i(o), end; i != end; ++i) >>>> { >>>> try >>>> { >>>> std::string strKey = luabind::object_cast<std::string>(i.key()); >>>> printf("%s\n",strKey.c_str()); >>>> } >>>> catch(luabind::cast_failed & e) >>>> { >>>> printf("error\n"); >>>> } >>>> } >>>> >>>> ---------- >>>> >>>> As a result, it simply prints "error" indefinitely. >>>> >>>> Thanks. >>>> >>>> >>>> On 11/12/2015 17:57, Pavel Kovalenko wrote: >>>>> Hi, >>>>> >>>>> I don't have such problem (using luabind-deboostified fork). Could you >>>>> show the code which causes an infinite loop? Which fork do you use? >>>>> >>>>> On 12/11/2015 3:00 PM, luabind-user-request@... wrote: >>>>>> Send luabind-user mailing list submissions to >>>>>> luabind-user@... >>>>>> >>>>>> To subscribe or unsubscribe via the World Wide Web, visit >>>>>> https://lists.sourceforge.net/lists/listinfo/luabind-user >>>>>> or, via email, send a message with subject or body 'help' to >>>>>> luabind-user-request@... >>>>>> >>>>>> You can reach the person managing the list at >>>>>> luabind-user-owner@... >>>>>> >>>>>> When replying, please edit your Subject line so it is more specific >>>>>> than "Re: Contents of luabind-user digest..." >>>>>> >>>>>> >>>>>> Today's Topics: >>>>>> >>>>>> 1. Re: How to get the attributes of a lua class without their >>>>>> names, using luabind (Crashy) >>>>>> >>>>>> >>>>>> ---------------------------------------------------------------------- >>>>>> >>>>>> Message: 1 >>>>>> Date: Thu, 10 Dec 2015 05:07:38 -0700 (MST) >>>>>> From: Crashy <jean-baptiste.griffo@...> >>>>>> Subject: Re: [luabind] How to get the attributes of a lua class >>>>>> without their names, using luabind >>>>>> To: luabind-user@... >>>>>> Message-ID: <1449749258848-7670726.post@...> >>>>>> Content-Type: text/plain; charset=us-ascii >>>>>> >>>>>> Hi ! >>>>>> >>>>>> I hate to 'bump' very old topics, but I'm facing the same problem while >>>>>> writing a lua debugger. >>>>>> I can access values by name, but using the iterator results in an infinite >>>>>> loop. >>>>>> Iterators are doing well when the object is a simple table though, it only >>>>>> fails when the object is a luabind class. >>>>>> >>>>>> Does anybody has a solution to iterate over member variables of a luabind >>>>>> class ? >>>>>> >>>>>> Thanks ! >>>>>> >>>>>> >>>>>> Thibault Ehrhart wrote >>>>>>> Hello everyone, >>>>>>> >>>>>>> I have a Lua class (defined using luabind's 'class' keyword) and I'd like >>>>>>> to get the value of the attributes defined in Lua, with C++. >>>>>>> >>>>>>> In the code below, I've defined a class, created an instance "foo" and set >>>>>>> a custom attribute "bar" to that instance. Finally, I am calling a C++ >>>>>>> function which has to print the attributes of the instance passed as a >>>>>>> parameter. >>>>>>> >>>>>>> Here's the Lua code : >>>>>>> >>>>>>> class 'MyLuaClass' >>>>>>> function MyLuaClass:__init() end >>>>>>> >>>>>>> foo = MyLuaClass() >>>>>>> foo.bar = "baz"; >>>>>>> PrintAttributes(foo); >>>>>>> >>>>>>> And now the C++ code of the PrintAttributes function, obj is a class >>>>>>> instance: >>>>>>> >>>>>>> void PrintAttributes(luabind::object &obj) >>>>>>> { >>>>>>> // Direct access works >>>>>>> std::cout << obj["bar"] << std::endl; // Will print "baz" :-) >>>>>>> >>>>>>> // But what if I don't know the name of the variable(s)? >>>>>>> for (luabind::iterator it(obj); it != luabind::iterator(); ++it) >>>>>>> { >>>>>>> // Doesn't work since obj is an userdata >>>>>>> } >>>>>>> } >>>>>>> >>>>>>> I've also tried to use class_info but it only works with properties >>>>>>> defined >>>>>>> in a C++ class. Is there a way to access those defined with Lua? >>>>>>> >>>>>>> Regards, >>>>>> >>>>>> -- >>>>>> View this message in context: http://lua.2524044.n2.nabble.com/How-to-get-the-attributes-of-a-lua-class-without-their-names-using-luabind-tp7654070p7670726.html >>>>>> Sent from the Lua C++ Bind mailing list archive at Nabble.com. >>>>>> >>>>>> >>>>>> >>>>>> ------------------------------ >>>>>> >>>>>> ------------------------------------------------------------------------------ >>>>>> >>>>>> >>>>>> ------------------------------ >>>>>> >>>>>> _______________________________________________ >>>>>> luabind-user mailing list >>>>>> luabind-user@... >>>>>> https://lists.sourceforge.net/lists/listinfo/luabind-user >>>>>> >>>>>> >>>>>> End of luabind-user Digest, Vol 94, Issue 1 >>>>>> ******************************************* >>>>>> >>>>>> >> ------------------------------------------------------------------------------ >> _______________________________________________ >> luabind-user mailing list >> lua...@li... >> https://lists.sourceforge.net/lists/listinfo/luabind-user > > ------------------------------------------------------------------------------ > _______________________________________________ > luabind-user mailing list > lua...@li... > https://lists.sourceforge.net/lists/listinfo/luabind-user |
From: Michael S. <ms...@tu...> - 2015-12-13 13:30:38
|
Yes, I was referring to the use of the class functionality without a c++ base class. Am 13.12.2015 um 12:53 schrieb jean-baptiste griffo: > Well they are pretty usefull if you want to inherit from a c++ class. > I'm making a game engine and these lua-class are awesome to add new > Types to the engine :) > On 12/12/2015 18:28, Michael Steinberg wrote: >> Nevermind... I will try to reproduce later. >> And I need to find out what's the use for having these lua-only >> classes... :) >> >> Am 12.12.2015 um 15:10 schrieb jean-baptiste griffo: >>> This works for me too in such a case, but it fails if the object is a >>> luabind 'class' object, as in the OP message: >>> >>> class 'MyLuaClass' >>> function MyLuaClass:__init() end >>> >>> foo = MyLuaClass() >>> foo.bar = "baz"; >>> PrintAttributes(foo); >>> >>> >>> >>> On 12/12/2015 14:48, Pavel Kovalenko wrote: >>>> This example works for me (but I use another fork: >>>> https://github.com/decimad/luabind-deboostified) >>>> >>>> lua code: >>>> >>>> local obj = {} >>>> obj.foo = function (self) >>>> puts("obj:foo") >>>> end >>>> obj.data = 42 >>>> >>>> dump_object(obj) >>>> >>>> cpp code: >>>> >>>> void dump_object(const luabind::object &obj) >>>> { >>>> for (luabind::iterator it(obj), end; it!=end; it++) >>>> { >>>> auto s = object_cast<std::string>(it.key()); >>>> puts(s.c_str()); >>>> } >>>> } >>>> >>>> What kind of lua object are you trying to iterate over? >>>> On 12/12/2015 0:23 AM, jean-baptiste griffo wrote: >>>>> Hi, >>>>> >>>>> Well it's weird but I don't remember the exact fork I'm using, I think I >>>>> use this one >>>>> https://github.com/mrsharpoblunto/LHP/tree/master/luabind-0.7/include/luabind >>>>> I do not use the official release because I had some problems related to >>>>> size_t & x64 builds, and this fork solved it. >>>>> >>>>> Here is the c++ code, please note that at this point I'm 100% sure the >>>>> object on the stack is the "self" of my class instance >>>>> >>>>> //get the luabind object from the stack >>>>> luabind::object o(luabind::from_stack(L, lastIndex)); >>>>> >>>>> for (luabind::iterator i(o), end; i != end; ++i) >>>>> { >>>>> try >>>>> { >>>>> std::string strKey = luabind::object_cast<std::string>(i.key()); >>>>> printf("%s\n",strKey.c_str()); >>>>> } >>>>> catch(luabind::cast_failed & e) >>>>> { >>>>> printf("error\n"); >>>>> } >>>>> } >>>>> >>>>> ---------- >>>>> >>>>> As a result, it simply prints "error" indefinitely. >>>>> >>>>> Thanks. >>>>> >>>>> >>>>> On 11/12/2015 17:57, Pavel Kovalenko wrote: >>>>>> Hi, >>>>>> >>>>>> I don't have such problem (using luabind-deboostified fork). Could you >>>>>> show the code which causes an infinite loop? Which fork do you use? >>>>>> >>>>>> On 12/11/2015 3:00 PM, luabind-user-request@... wrote: >>>>>>> Send luabind-user mailing list submissions to >>>>>>> luabind-user@... >>>>>>> >>>>>>> To subscribe or unsubscribe via the World Wide Web, visit >>>>>>> https://lists.sourceforge.net/lists/listinfo/luabind-user >>>>>>> or, via email, send a message with subject or body 'help' to >>>>>>> luabind-user-request@... >>>>>>> >>>>>>> You can reach the person managing the list at >>>>>>> luabind-user-owner@... >>>>>>> >>>>>>> When replying, please edit your Subject line so it is more specific >>>>>>> than "Re: Contents of luabind-user digest..." >>>>>>> >>>>>>> >>>>>>> Today's Topics: >>>>>>> >>>>>>> 1. Re: How to get the attributes of a lua class without their >>>>>>> names, using luabind (Crashy) >>>>>>> >>>>>>> >>>>>>> ---------------------------------------------------------------------- >>>>>>> >>>>>>> Message: 1 >>>>>>> Date: Thu, 10 Dec 2015 05:07:38 -0700 (MST) >>>>>>> From: Crashy <jean-baptiste.griffo@...> >>>>>>> Subject: Re: [luabind] How to get the attributes of a lua class >>>>>>> without their names, using luabind >>>>>>> To: luabind-user@... >>>>>>> Message-ID: <1449749258848-7670726.post@...> >>>>>>> Content-Type: text/plain; charset=us-ascii >>>>>>> >>>>>>> Hi ! >>>>>>> >>>>>>> I hate to 'bump' very old topics, but I'm facing the same problem while >>>>>>> writing a lua debugger. >>>>>>> I can access values by name, but using the iterator results in an infinite >>>>>>> loop. >>>>>>> Iterators are doing well when the object is a simple table though, it only >>>>>>> fails when the object is a luabind class. >>>>>>> >>>>>>> Does anybody has a solution to iterate over member variables of a luabind >>>>>>> class ? >>>>>>> >>>>>>> Thanks ! >>>>>>> >>>>>>> >>>>>>> Thibault Ehrhart wrote >>>>>>>> Hello everyone, >>>>>>>> >>>>>>>> I have a Lua class (defined using luabind's 'class' keyword) and I'd like >>>>>>>> to get the value of the attributes defined in Lua, with C++. >>>>>>>> >>>>>>>> In the code below, I've defined a class, created an instance "foo" and set >>>>>>>> a custom attribute "bar" to that instance. Finally, I am calling a C++ >>>>>>>> function which has to print the attributes of the instance passed as a >>>>>>>> parameter. >>>>>>>> >>>>>>>> Here's the Lua code : >>>>>>>> >>>>>>>> class 'MyLuaClass' >>>>>>>> function MyLuaClass:__init() end >>>>>>>> >>>>>>>> foo = MyLuaClass() >>>>>>>> foo.bar = "baz"; >>>>>>>> PrintAttributes(foo); >>>>>>>> >>>>>>>> And now the C++ code of the PrintAttributes function, obj is a class >>>>>>>> instance: >>>>>>>> >>>>>>>> void PrintAttributes(luabind::object &obj) >>>>>>>> { >>>>>>>> // Direct access works >>>>>>>> std::cout << obj["bar"] << std::endl; // Will print "baz" :-) >>>>>>>> >>>>>>>> // But what if I don't know the name of the variable(s)? >>>>>>>> for (luabind::iterator it(obj); it != luabind::iterator(); ++it) >>>>>>>> { >>>>>>>> // Doesn't work since obj is an userdata >>>>>>>> } >>>>>>>> } >>>>>>>> >>>>>>>> I've also tried to use class_info but it only works with properties >>>>>>>> defined >>>>>>>> in a C++ class. Is there a way to access those defined with Lua? >>>>>>>> >>>>>>>> Regards, >>>>>>> -- >>>>>>> View this message in context: http://lua.2524044.n2.nabble.com/How-to-get-the-attributes-of-a-lua-class-without-their-names-using-luabind-tp7654070p7670726.html >>>>>>> Sent from the Lua C++ Bind mailing list archive at Nabble.com. >>>>>>> >>>>>>> >>>>>>> >>>>>>> ------------------------------ >>>>>>> >>>>>>> ------------------------------------------------------------------------------ >>>>>>> >>>>>>> >>>>>>> ------------------------------ >>>>>>> >>>>>>> _______________________________________________ >>>>>>> luabind-user mailing list >>>>>>> luabind-user@... >>>>>>> https://lists.sourceforge.net/lists/listinfo/luabind-user >>>>>>> >>>>>>> >>>>>>> End of luabind-user Digest, Vol 94, Issue 1 >>>>>>> ******************************************* >>>>>>> >>>>>>> >>> ------------------------------------------------------------------------------ >>> _______________________________________________ >>> luabind-user mailing list >>> lua...@li... >>> https://lists.sourceforge.net/lists/listinfo/luabind-user >> ------------------------------------------------------------------------------ >> _______________________________________________ >> luabind-user mailing list >> lua...@li... >> https://lists.sourceforge.net/lists/listinfo/luabind-user > > ------------------------------------------------------------------------------ > _______________________________________________ > luabind-user mailing list > lua...@li... > https://lists.sourceforge.net/lists/listinfo/luabind-user |
From: jean-baptiste g. <jea...@la...> - 2015-12-12 00:23:17
|
Hi, Well it's weird but I don't remember the exact fork I'm using, I think I use this one https://github.com/mrsharpoblunto/LHP/tree/master/luabind-0.7/include/luabind I do not use the official release because I had some problems related to size_t & x64 builds, and this fork solved it. Here is the c++ code, please note that at this point I'm 100% sure the object on the stack is the "self" of my class instance //get the luabind object from the stack luabind::object o(luabind::from_stack(L, lastIndex)); for (luabind::iterator i(o), end; i != end; ++i) { try { std::string strKey = luabind::object_cast<std::string>(i.key()); printf("%s\n",strKey.c_str()); } catch(luabind::cast_failed & e) { printf("error\n"); } } ---------- As a result, it simply prints "error" indefinitely. Thanks. On 11/12/2015 17:57, Pavel Kovalenko wrote: > Hi, > > I don't have such problem (using luabind-deboostified fork). Could you > show the code which causes an infinite loop? Which fork do you use? > > On 12/11/2015 3:00 PM, lua...@li... wrote: >> Send luabind-user mailing list submissions to >> lua...@li... >> >> To subscribe or unsubscribe via the World Wide Web, visit >> https://lists.sourceforge.net/lists/listinfo/luabind-user >> or, via email, send a message with subject or body 'help' to >> lua...@li... >> >> You can reach the person managing the list at >> lua...@li... >> >> When replying, please edit your Subject line so it is more specific >> than "Re: Contents of luabind-user digest..." >> >> >> Today's Topics: >> >> 1. Re: How to get the attributes of a lua class without their >> names, using luabind (Crashy) >> >> >> ---------------------------------------------------------------------- >> >> Message: 1 >> Date: Thu, 10 Dec 2015 05:07:38 -0700 (MST) >> From: Crashy <jea...@la...> >> Subject: Re: [luabind] How to get the attributes of a lua class >> without their names, using luabind >> To: lua...@li... >> Message-ID: <144...@n2...> >> Content-Type: text/plain; charset=us-ascii >> >> Hi ! >> >> I hate to 'bump' very old topics, but I'm facing the same problem while >> writing a lua debugger. >> I can access values by name, but using the iterator results in an infinite >> loop. >> Iterators are doing well when the object is a simple table though, it only >> fails when the object is a luabind class. >> >> Does anybody has a solution to iterate over member variables of a luabind >> class ? >> >> Thanks ! >> >> >> Thibault Ehrhart wrote >>> Hello everyone, >>> >>> I have a Lua class (defined using luabind's 'class' keyword) and I'd like >>> to get the value of the attributes defined in Lua, with C++. >>> >>> In the code below, I've defined a class, created an instance "foo" and set >>> a custom attribute "bar" to that instance. Finally, I am calling a C++ >>> function which has to print the attributes of the instance passed as a >>> parameter. >>> >>> Here's the Lua code : >>> >>> class 'MyLuaClass' >>> function MyLuaClass:__init() end >>> >>> foo = MyLuaClass() >>> foo.bar = "baz"; >>> PrintAttributes(foo); >>> >>> And now the C++ code of the PrintAttributes function, obj is a class >>> instance: >>> >>> void PrintAttributes(luabind::object &obj) >>> { >>> // Direct access works >>> std::cout << obj["bar"] << std::endl; // Will print "baz" :-) >>> >>> // But what if I don't know the name of the variable(s)? >>> for (luabind::iterator it(obj); it != luabind::iterator(); ++it) >>> { >>> // Doesn't work since obj is an userdata >>> } >>> } >>> >>> I've also tried to use class_info but it only works with properties >>> defined >>> in a C++ class. Is there a way to access those defined with Lua? >>> >>> Regards, >> >> >> >> >> -- >> View this message in context: http://lua.2524044.n2.nabble.com/How-to-get-the-attributes-of-a-lua-class-without-their-names-using-luabind-tp7654070p7670726.html >> Sent from the Lua C++ Bind mailing list archive at Nabble.com. >> >> >> >> ------------------------------ >> >> ------------------------------------------------------------------------------ >> >> >> ------------------------------ >> >> _______________________________________________ >> luabind-user mailing list >> lua...@li... >> https://lists.sourceforge.net/lists/listinfo/luabind-user >> >> >> End of luabind-user Digest, Vol 94, Issue 1 >> ******************************************* >> >> |