Re: How to get the attributes of a lua class, without their names, using luabind

Michael Steinberg <[email protected]> Sun, 13 Dec 2015 14:29:42 +0100
Newsgroups gmane.comp.lang.lua.bind.user
Message-ID <[email protected]>
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
>>> [email protected]
>>> https://lists.sourceforge.net/lists/listinfo/luabind-user
>> ------------------------------------------------------------------------------
>> _______________________________________________
>> luabind-user mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/luabind-user
>
> ------------------------------------------------------------------------------
> _______________________________________________
> luabind-user mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/luabind-user


------------------------------------------------------------------------------