Re: Binding static methods with luabind?

Nicolas Goles <[email protected]>
Newsgroups gmane.comp.lang.lua.bind.user
Message-ID <[email protected]>
Ok, I fixed the problem

I don't know why I was doing such a complex binding when I wasn't using 
overloaded member functions.

The following works

     LuaRegisterManager.getInstance():execScript('hola.lua')

When using this typical binding

      .def("execScript", &LuaRegisterManager::execScript)

Thank you all. :)
-- 
Nicolas Goles Domic
Founder & Lead Programmer
Gando Games <www.gandogames.com>



Nigel Atkinson wrote:
> Hi,
>
> Just off the top of my head you want:
>
> LuaRegisterManager.getInstance():execScript("script.lua")
>
> Note the semi-colon rather than the period after getInstance().
>
> Remember that
>
> obj:func( p1, p2, etc )
>
> is the same as
>
> obj.func( obj, p1, p2, etc )
>
> In the case above obj is the result of LuaRegisterManager.getInstance()
>
> HTH
>
> Nigel
>
> On Wed, 2010-09-15 at 19:42 -0400, Nicolas Goles wrote:
>    
>> Hello!,
>>
>> Thanks for the wonderful explanation.
>>
>> My binding ended  up like :
>>
>>              //Register with luabind.
>>              luabind::module(L)
>>              [
>>               luabind::class_<LuaRegisterManager>("LuaRegisterManager")
>>               .def("execScript",
>>          (void(LuaRegisterManager::*)())&LuaRegisterManager::execScript)
>>               .scope
>>               [
>>                luabind::def("getInstance",
>>          &LuaRegisterManager::getInstance) //returns static singleton
>>          instance
>>                ]
>>               ];
>> It works great as you said, when performing the following Lua call:
>>
>>          LuaRegisterManager.getInstance()
>>
>> However, what if I would like to call "execScript" (which I registered
>> as a .def in my initial binding ? )
>>
>> I thought it would be something like ( from Lua ) :
>>
>>          LuaRegisterManager.getInstance().execScript("script.lua")
>>
>> But that returns the following error:
>>
>>          Error: No matching overload found, candidates:
>>          void execScript(LuaRegisterManager&)
>>
>>
>>
>>
>> Thank you very much for all your help.
>>
>>
>> -- 
>> Nicolas Goles Domic
>> Founder&  Lead Programmer
>> Gando Games
>>
>>
>>
>>
>> Iliya Trendafilov wrote:
>>      
>>> Try LuaRegisterManager.getInstance()
>>> Note there is a dot `.` between LuaRegisterManager and
>>> getInstance(), you seem to be using colon `:` instead.
>>>
>>> In Lua the colon is just a syntactic sugar to mimic passing of this
>>> pointer in OO languages, the code `LuaRegisterManager:getInstance()`
>>> is equivalent to
>>> `LuaRegisterManager.getInstance(LuaRegisterManager)` which is not
>>> what you want.
>>>
>>>
>>> On Wed, Sep 15, 2010 at 7:51 PM, Nicolas Goles
>>> <[email protected]>  wrote:
>>>          Great,
>>>
>>>          The .scope[] solved the problem ( now I have a different
>>>          problem );
>>>
>>>          When I execute the Lua script I mentioned ( 1 line script )
>>>
>>>          	LuaRegisterManager:getInstance()
>>>
>>>
>>>
>>>          I get the following Error in my Console:
>>>
>>>
>>>                  Error: LuaRegisterManager* getInstance()
>>>
>>>
>>>
>>>          Before adding the .scope [] I was getting
>>>
>>>
>>>          	Error: no static 'getInstance' in class 'LuaRegisterManager'
>>>          So I guess it's finding the static method now , but there
>>>          seems to be a different error this time.
>>>
>>>          I am new to Lua/Luabind so help is really welcome.
>>>
>>>          Thanks!
>>>
>>>
>>>          --
>>>          Nicolas Goles Domic
>>>          Founder&  Lead Programmer
>>>          Gando Games
>>>
>>>
>>>
>>>
>>>
>>>          Iliya Trendafilov wrote:
>>>          >  Hi,
>>>          >
>>>          >  That should do it, note the scope around the definition of
>>>          >  getInstance
>>>          >
>>>          >      luabind::module(L)
>>>          >      [
>>>          >       luabind::class_<LuaRegisterManager>("LuaRegisterManager") //Register the class
>>>          >       .def("execScript", (void(LuaRegisterManager::*)())&LuaRegisterManager::execScript) //method to execute a lua script
>>>          >       .scope
>>>          >        [
>>>          >            def("getInstance",&LuaRegisterManager::getInstance) //returns static singleton instance
>>>          >        ]
>>>          >
>>>          >       ];
>>>          >
>>>          >
>>>          >  Invoke with LuaRegisterManager.getInstance() (i.e. dot
>>>          >  instead of colon). A bit of explanation can be found here:
>>>          >  http://www.rasterbar.com/products/luabind/docs.html#nested-scopes-and-static-functions
>>>          >
>>>          >  Hope that helps
>>>          >
>>>          >  On Wed, Sep 15, 2010 at 7:32 PM, Nicolas Goles
>>>          >  <[email protected]>  wrote:
>>>          >          Hello,
>>>          >
>>>          >          I have a Singleton Class in my application, it has
>>>          >          a member method defined like:
>>>          >          	static LuaRegisterManager* getInstance();
>>>          >          I'm trying to register this class with Luabind,
>>>          >          and expose some methods to Lua:
>>>          >              //Register with luabind.
>>>          >              luabind::module(L)
>>>          >              [
>>>          >               luabind::class_<LuaRegisterManager>("LuaRegisterManager") //Register the class
>>>          >               .def("execScript", (void(LuaRegisterManager::*)())&LuaRegisterManager::execScript) //method to execute a lua script
>>>          >               .def("getInstance",&LuaRegisterManager::getInstance) //returns static singleton instance
>>>          >               ];
>>>          >          The problem is that if I execute the following Lua script:
>>>          >
>>>          >              LuaRegisterManager:getInstance()
>>>          >          I get :
>>>          >          	Error: no static 'getInstance' in class 'LuaRegisterManager'
>>>          >
>>>          >
>>>          >
>>>          >          So I guess I'm making an error and my static
>>>          >          getInstance() method is not being registered with
>>>          >          luabind correctly.
>>>          >
>>>          >
>>>          >          Help is welcome :)
>>>          >
>>>          >
>>>          >          -- 
>>>          >          Nicolas Goles Domic
>>>          >          Founder&  Lead Programmer
>>>          >          Gando Games
>>>          >
>>>          >
>>>          >
>>>          >          ------------------------------------------------------------------------------
>>>          >          Start uncovering the many advantages of virtual
>>>          >          appliances
>>>          >          and start using them to simplify application
>>>          >          deployment and
>>>          >          accelerate your shift to cloud computing.
>>>          >          http://p.sf.net/sfu/novell-sfdev2dev
>>>          >          _______________________________________________
>>>          >          luabind-user mailing list
>>>          >          [email protected]
>>>          >          https://lists.sourceforge.net/lists/listinfo/luabind-user
>>>          >
>>>          >
>>>          >
>>>          >  __________________________________________________________
>>>          >  ------------------------------------------------------------------------------ Start uncovering the many advantages of virtual appliances and start using them to simplify application deployment and accelerate your shift to cloud computing. http://p.sf.net/sfu/novell-sfdev2dev
>>>          >
>>>          >  __________________________________________________________
>>>          >
>>>          >  _______________________________________________
>>>          >  luabind-user mailing list
>>>          >  [email protected]
>>>          >  https://lists.sourceforge.net/lists/listinfo/luabind-user
>>>          >
>>>        
>> ------------------------------------------------------------------------------
>> Start uncovering the many advantages of virtual appliances
>> and start using them to simplify application deployment and
>> accelerate your shift to cloud computing.
>> http://p.sf.net/sfu/novell-sfdev2dev
>> _______________________________________________ luabind-user mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/luabind-user
>>      
>
>
>
> ------------------------------------------------------------------------------
> Start uncovering the many advantages of virtual appliances
> and start using them to simplify application deployment and
> accelerate your shift to cloud computing.
> http://p.sf.net/sfu/novell-sfdev2dev
> _______________________________________________
> luabind-user mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/luabind-user
>

------------------------------------------------------------------------------
Start uncovering the many advantages of virtual appliances
and start using them to simplify application deployment and
accelerate your shift to cloud computing.
http://p.sf.net/sfu/novell-sfdev2dev

_______________________________________________
luabind-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/luabind-user
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.