Re: Factories as script constructors.
Kristoffer Danielsson <[email protected]> Fri, 24 Feb 2012 21:53:44 +0100
| Newsgroups | gmane.comp.lang.lua.bind.user |
|---|---|
| Message-ID | <[email protected]> |
Hi, In my scripts, I've had singleton classes since version 0.7. Maybe not what you are looking for, but here's how I did it: 1) For the bound class, simply remove the constructor bindings: luabind::constructor<>2) Instantiate the bound class in C++ and put it in globals: luabind::globals(L)["MyClass"] = &myClass;3) Then in Lua: MyClass:foo() Kristoffer Date: Fri, 24 Feb 2012 11:52:33 -0600 From: [email protected] To: [email protected] Subject: Re: [luabind] Factories as script constructors. Seems like an useful addition and it sounds like you're on the right track (at least, that's how I'd do it :D) Please feel free to fork on github to keep track of your progress and share. Would be great to add a test at the same time for that functionality. Ryan On Fri, Feb 24, 2012 at 9:38 AM, Tom Nelson <[email protected]> wrote: Here is what I have so far. I've included class.hpp and detail/factory_ctor.hpp. I'm still on luabind 9.1 by the way. (Also my plan is to get it working for 0 or 1 parameter before adding PP_ITERATION back in. Take a look and see if anything jumps out at you. The code is based on detail/constructor.hpp since that seemed to be the closest to the functionality that I was trying to duplicate. factory_ctor should create a structure with the function call operator defined. The trick, I think, is how to get luabind to correctly recognize the signature and build the call correctly. I'm going to be looking at this more over the weekend. Thanks again Tom On 02/23/2012 04:49 PM, Nigel Atkinson wrote: This looks interesting, and in my opinion would make a useful addition to the library. Unfortunately I'm probably not better than you at template meta programming, but I'm happy to take a look and see if anything "jumps out". I have a related yet different technique for singleton classes. In this case I want to make it explicit in the Lua code that it is a singleton. Fortunately vanilla Luabind can be used. class_< SomeManager>( "SomeManager" ) .scope [ .def( "getSingleton",&SomeManager::getSingleton ) ] .def( "func",&SomeManager::memberfunc ) mgr = SomeManager.getSingleton() mgr:func() Nigel On 24/02/2012, at 9:57 AM, Thomas Nelson wrote: I have a C++ class that I want to export to Lua. This class requires a factory method to construct and I would like to hide this little detail from the script side of things. If my class looks like this: class Foo { public: static boost::shared_ptr<Foo> factoryFoo( int N ); void doSomething( ); protected: Foo() ; }; module(L) [ class_<Foo, boost::shared_ptr<Foo> >("LuaFoo") .factory(&Foo::factoryFoo) .def("doSomething",&Foo::doSomething) ]; From the script I would be able to do the following: myF = LuaFoo( 5 ) -- Actually calls the static method Foo::factoryFoo myF:doSomething() Has anyone else done something like this? I’ve gotten quite a ways by cloning and mutating the constructor.hpp implementation and adapting it to call a static member but I’m now getting lost in template expansion hell. I seem to be encountering two problems: 1) Figuring out the Signature deduction templates and making my static function “look” like a constructor. 2) Determining the boost::shared_ptr<foo> when I’m deep inside the factory wrapper. If anybody has some experience in these areas it would be great. Tom ------------------------------------------------------------------------------ Virtualization & Cloud Management Using Capacity Planning Cloud computing makes use of virtualization - but cloud computing also focuses on allowing computing to be delivered as a service. http://www.accelacomm.com/jaw/sfnl/114/51521223/ _______________________________________________ luabind-user mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/luabind-user -- Ryan Pavlik HCI Graduate Student Virtual Reality Applications Center Iowa State University [email protected] http://academic.cleardefinition.com ------------------------------------------------------------------------------ Virtualization & Cloud Management Using Capacity Planning Cloud computing makes use of virtualization - but cloud computing also focuses on allowing computing to be delivered as a service. http://www.accelacomm.com/jaw/sfnl/114/51521223/ _______________________________________________ luabind-user mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/luabind-user ------------------------------------------------------------------------------ Virtualization & Cloud Management Using Capacity Planning Cloud computing makes use of virtualization - but cloud computing also focuses on allowing computing to be delivered as a service. http://www.accelacomm.com/jaw/sfnl/114/51521223/ _______________________________________________ luabind-user mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/luabind-user