Re: Luabind and passing classes
Nigel Atkinson <[email protected]>
| Newsgroups | gmane.comp.lang.lua.bind.user |
|---|---|
| Message-ID | <1279779145.1444.18.camel@rincewind> |
If you change to returning a std::string, rather than a const char *, it
should work. I'm not sure, but from memory Luabind has a 'built-in'
converter from std:string to a Lua string.
You can return a const char * if you really need to, but I think it will
just appear as Lua userdata? Not sure. What was the error you got?
Unless you're happy with std::string, then it doesn't matter. ;-)
Nigel
On Wed, 2010-07-21 at 19:42 -0700, Nathaniel Lewis wrote:
> Thanks I spent a bit and got what I wanted working sort of. How do you
> you return strings from a exposed function? I got the exposing working
> fine and I can pass a string as a parameter but how do I get it as a
> result. the class (part of testing) is
>
> class TestClass {
> std::string myString;
> public:
> TestClass() {
> myString = "Not Initalized";
> }
> TestClass( const char* aString ) {
> myString = std::string(aString);
> }
> void setString( const char* aString ) {
> myString = std::string(aString);
> }
> const char* getString( void ) {
> return myString.c_str();
> }
> void printString( void ) {
> std::cout << myString << std::endl;
> }
> static void configureLuaObject(lua_State* lVM) {
> luabind::module(lVM) [
> luabind::class_<TestClass>("TestClass")
> .def(luabind::constructor <> ())
> .def(luabind::constructor<const char*>())
> .def("setString", &TestClass::setString)
> .def("getString", &TestClass::getString)
> .def("printString", &TestClass::printString)
> ];
> }
> void callFunction(lua_State* lVM) {
> luabind::call_function<void>(lVM, "AFunction",
> boost::ref(this));
> }
> };
>
> getString throws an error when run.
> Nathaniel
>
> On Thu, 2010-07-22 at 13:40 +1200, Nigel Atkinson wrote:
> > Hi Nathaniel,
> >
> > Short answer: Yes.
> >
> > If you bind a class using Luabind it can be passed to Lua functions as
> > a parameter. When you bind a class you do not need to bind the
> > class's constructor. Omitting the constructor prevents your Lua
> > script from being able to instantiate that particular class, however
> > Lua can otherwise use instances passed to it from C++.
> >
> > I do this quite often with singleton classes.
> >
> > Nigel Atkinson
> >
> > On Wed, 2010-07-21 at 16:53 -0700, Nathaniel Lewis wrote:
> > > I was reading through some tutorials and I had a question unanswered.
> > > How do I pass a specific class to Lua? I have a class that represents a
> > > world in my game engine and I need some way to talk with it from Lua. I
> > > think LuaBind is the answer but I don't know. I would never want to
> > > create the class from Lua. Instead I would want to pass a reference to
> > > the one created on the c++ side to Lua and then call functions inside of
> > > it. Is this possible with LuaBind? Basically a simple script would
> > > look like this
> > >
> > > -- called when map is loaded by engine --
> > > function Init (worldInstance)
> > > -- do stuff --
> > > end
> > >
> > > -- called after every frame is rendered --
> > > Update = coroutine.wrap( function (worldInstance, timeSinceLastFrame)
> > > while true do
> > > -- do stuff + call coroutine.yield() when waiting for things --
> > > end
> > > end)
> > > Nathaniel
> > >
> > >
> > > ------------------------------------------------------------------------------
> > > This SF.net email is sponsored by Sprint
> > > What will you do first with EVO, the first 4G phone?
> > > Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
> > > _______________________________________________
> > > luabind-user mailing list
> > > [email protected]
> > > https://lists.sourceforge.net/lists/listinfo/luabind-user
> >
> > ------------------------------------------------------------------------------
> > This SF.net email is sponsored by Sprint
> > What will you do first with EVO, the first 4G phone?
> > Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
> > _______________________________________________ luabind-user mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/luabind-user
>
>
>
> ------------------------------------------------------------------------------
> This SF.net email is sponsored by Sprint
> What will you do first with EVO, the first 4G phone?
> Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
> _______________________________________________
> luabind-user mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/luabind-user
------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
luabind-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/luabind-user