Re: Binding static methods with luabind?
Nigel Atkinson <[email protected]>
| Newsgroups | gmane.comp.lang.lua.bind.user |
|---|---|
| Message-ID | <1284598065.2033.37.camel@octavo> |
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