luabind-user Mailing List for luabind (Page 2)
Brought to you by:
arvidn,
daniel_wallin
You can subscribe to this list here.
2003 |
Jan
|
Feb
|
Mar
|
Apr
(54) |
May
(66) |
Jun
(56) |
Jul
(114) |
Aug
(84) |
Sep
(20) |
Oct
(30) |
Nov
(16) |
Dec
(38) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2004 |
Jan
(36) |
Feb
(27) |
Mar
(32) |
Apr
(83) |
May
(66) |
Jun
(64) |
Jul
(63) |
Aug
(45) |
Sep
(14) |
Oct
(24) |
Nov
(19) |
Dec
(17) |
2005 |
Jan
(28) |
Feb
(20) |
Mar
(30) |
Apr
(19) |
May
(14) |
Jun
(18) |
Jul
(18) |
Aug
(6) |
Sep
(34) |
Oct
(46) |
Nov
(26) |
Dec
(44) |
2006 |
Jan
(41) |
Feb
(25) |
Mar
(42) |
Apr
(23) |
May
(21) |
Jun
(34) |
Jul
(44) |
Aug
(25) |
Sep
(29) |
Oct
(36) |
Nov
(7) |
Dec
(1) |
2007 |
Jan
(46) |
Feb
(22) |
Mar
(6) |
Apr
(10) |
May
(19) |
Jun
(20) |
Jul
|
Aug
(11) |
Sep
(33) |
Oct
(18) |
Nov
(13) |
Dec
(10) |
2008 |
Jan
(7) |
Feb
(6) |
Mar
(9) |
Apr
(5) |
May
(14) |
Jun
(29) |
Jul
(15) |
Aug
(10) |
Sep
(75) |
Oct
(43) |
Nov
(38) |
Dec
(40) |
2009 |
Jan
(62) |
Feb
(61) |
Mar
(74) |
Apr
(22) |
May
(31) |
Jun
(32) |
Jul
(32) |
Aug
(36) |
Sep
(7) |
Oct
(20) |
Nov
(51) |
Dec
(65) |
2010 |
Jan
(38) |
Feb
(48) |
Mar
(57) |
Apr
(21) |
May
(23) |
Jun
(41) |
Jul
(58) |
Aug
(17) |
Sep
(39) |
Oct
(15) |
Nov
(3) |
Dec
(13) |
2011 |
Jan
(35) |
Feb
(40) |
Mar
(17) |
Apr
(34) |
May
(39) |
Jun
(34) |
Jul
(19) |
Aug
(23) |
Sep
|
Oct
(20) |
Nov
(7) |
Dec
(12) |
2012 |
Jan
(13) |
Feb
(27) |
Mar
(15) |
Apr
(32) |
May
(9) |
Jun
(5) |
Jul
(4) |
Aug
|
Sep
(26) |
Oct
(4) |
Nov
(18) |
Dec
(4) |
2013 |
Jan
(15) |
Feb
(4) |
Mar
|
Apr
(20) |
May
(6) |
Jun
(10) |
Jul
(17) |
Aug
(6) |
Sep
(19) |
Oct
(3) |
Nov
(1) |
Dec
|
2014 |
Jan
(1) |
Feb
(6) |
Mar
|
Apr
|
May
(4) |
Jun
|
Jul
|
Aug
(3) |
Sep
(6) |
Oct
|
Nov
(6) |
Dec
|
2015 |
Jan
|
Feb
|
Mar
(3) |
Apr
(1) |
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
(2) |
Dec
(10) |
2016 |
Jan
(2) |
Feb
(1) |
Mar
|
Apr
(1) |
May
(1) |
Jun
|
Jul
|
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
From: Andreas G. <and...@tu...> - 2014-11-01 18:32:54
|
Hello, Your Lua code should not be working at all, since no libraries are loaded and print isn't even defined. After adding luaL_openlibs(L); after creating the Lua state, it works fine for me: $ ./lua value : 4 Regards, Andreas Am 01.11.2014 um 18:45 schrieb ma...@sq...: > Can anybody explain this for me? It used to work on an older system with > lua5.1. > > i'm now using lua5.2, luabind version us 0.9.1 (on both systems) > > g++ -o lua lua.cpp -lluabind -llua5.2 -ldl -I /usr/include/lua5.2 > ./lua > lua runtime error > [string "function test(t)..."]:2: attempt to concatenate field 'value' (a > function value) > > extern "C" { > #include "lua.h" > #include "lualib.h" > #include "lauxlib.h" > } > > #include <luabind/luabind.hpp> > #include <iostream> > > struct Test > { > Test(int v) : value(v) {}; > ~Test() {}; > int value; > }; > > > int DebuggerFunc(lua_State* L) > { > luabind::object error_msg(luabind::from_stack(L, -1)); > std::cerr << error_msg << std::endl; > return 0; > } > > int main() { > lua_State *L = luaL_newstate(); > luabind::open(L); > > luabind::module(L) > [ > luabind::class_<Test>("Test") > .def(luabind::constructor<int>()) > .def_readonly("value",&Test::value) > ]; > > luaL_dostring( > L, > "function test(t)\n" > " print(\"value : \" .. t.value)\n" > "end\n" > ); > > Test t(4); > > try { > luabind::call_function<int>(L, "test", &t); > } > catch (const luabind::error &er) > { > std::cerr << er.what() << std::endl; > lua_State* Ler=er.state(); > DebuggerFunc(Ler); > } > catch (...) > { > std::cerr << "Unknown error!" << std::endl; > } > lua_close(L); > } > > > ------------------------------------------------------------------------------ > _______________________________________________ > luabind-user mailing list > lua...@li... > https://lists.sourceforge.net/lists/listinfo/luabind-user |
From: <ma...@sq...> - 2014-11-01 17:59:31
|
Can anybody explain this for me? It used to work on an older system with lua5.1. i'm now using lua5.2, luabind version us 0.9.1 (on both systems) g++ -o lua lua.cpp -lluabind -llua5.2 -ldl -I /usr/include/lua5.2 ./lua lua runtime error [string "function test(t)..."]:2: attempt to concatenate field 'value' (a function value) extern "C" { #include "lua.h" #include "lualib.h" #include "lauxlib.h" } #include <luabind/luabind.hpp> #include <iostream> struct Test { Test(int v) : value(v) {}; ~Test() {}; int value; }; int DebuggerFunc(lua_State* L) { luabind::object error_msg(luabind::from_stack(L, -1)); std::cerr << error_msg << std::endl; return 0; } int main() { lua_State *L = luaL_newstate(); luabind::open(L); luabind::module(L) [ luabind::class_<Test>("Test") .def(luabind::constructor<int>()) .def_readonly("value",&Test::value) ]; luaL_dostring( L, "function test(t)\n" " print(\"value : \" .. t.value)\n" "end\n" ); Test t(4); try { luabind::call_function<int>(L, "test", &t); } catch (const luabind::error &er) { std::cerr << er.what() << std::endl; lua_State* Ler=er.state(); DebuggerFunc(Ler); } catch (...) { std::cerr << "Unknown error!" << std::endl; } lua_close(L); } |
From: Roman K. <kub...@gm...> - 2014-09-05 10:51:39
|
Thank you very much for that answer, i really didn't want to dig into boost but i got the courage to do that and it worked. Now i can just fall back to the original idea that's well documented. Thanks again. ==================================================================== _ _ _ _ _ _ __ _____| | |_ __ _ __ _ ___ __ ___ _ _| |_ _ _ ___| | |___ __| | \ V / _ \ | _/ _` / _` / -_) / _/ _ \ ' \ _| '_/ _ \ | / -_) _` | \_/\___/_|\__\__,_\__, \___| \__\___/_||_\__|_| \___/_|_\___\__,_| |___/ ==================================================================== On Fri, Sep 5, 2014 at 12:00 AM, Chris Byrne <Chr...@ba...> wrote: > ok, I missed that last bit in your email. When changing LUABIND_MAX_ARITY > to 20 there are indeed boost related compile errors. > > 2>s:\lib\luabind-0.9\luabind/detail/object_call.hpp(38): error C2977: > 'boost::tuples::tuple' : too many template arguments > 2> s:\lib\boost_1_46_1\boost/tuple/detail/tuple_basic.hpp(470) : > see declaration of 'boost::tuples::tuple' > 2> s:\lib\luabind-0.9\luabind/object.hpp(336) : see reference to > class template instantiation 'luabind::adl::object_interface<T>' being > compiled > > (excuse my super old versions of boost & luabind) > > > Per: > http://www.boost.org/doc/libs/1_56_0/libs/tuple/doc/tuple_users_guide.html *"The > current version supports tuples with 0-10 elements"* > > and there's > http://stackoverflow.com/questions/6425178/boost-tuple-increasing-maximum-number-of-elements which > suggests a couple of options. > > > i) Hack up tuple_basic.hpp and extend declarations out to the number of > arguments you need > ii) If your compiler(s) support variadic templates could consider changing > luabind to use std::tuple > iii) Changing luabind over to use boost::fusion::tuple which has > a FUSION_MAX_VECTOR_SIZE definition > > Hard to know which is least effort. Sticking with boost (options i & iii) > would be the most cross platform friendly (at least for now). > > > Hacking up tuplic_basic.hpp is somewhat tedious and a quick search wasn't > able to find someone who has already done this. > > Essentially involves extending out the number of template parameters: > template < > class T0 = null_type, class T1 = null_type, class T2 = null_type, > class T3 = null_type, class T4 = null_type, class T5 = null_type, > class T6 = null_type, class T7 = null_type, class T8 = null_type, > class T9 = null_type, class T10 = null_type, class T11 = null_type, > class T12 = null_type, class T13 = null_type, class T14 = null_type> > class tuple; > > along with the several supporting classes: > // Tuple to cons mapper -------------------------------------------------- > template <class T0, class T1, class T2, class T3, class T4, > class T5, class T6, class T7, class T8, class T9, > class T10, class T11, class T12, class T13, class T14> > struct map_tuple_to_cons > > > - > > I would still recommend using a facade and avoid the need for more > arguments. > > > Kind Regards, > CB > > > On Thu, Sep 4, 2014 at 12:41 PM, Roman Kubiak <kub...@gm...> > wrote: > >> Like i wrote, increasing that constant above 10 is impossible, you'll >> get flooded with compile errors, if that constant goes above 10 something >> needs to change in boost to handle that. My question what and how, i'm not >> a big boost expert, i use it only for luabind so i was wondering if there >> was a ready solution to get this working. >> >> cheers. >> >> ==================================================================== >> _ _ _ _ _ _ >> __ _____| | |_ __ _ __ _ ___ __ ___ _ _| |_ _ _ ___| | |___ __| | >> \ V / _ \ | _/ _` / _` / -_) / _/ _ \ ' \ _| '_/ _ \ | / -_) _` | >> \_/\___/_|\__\__,_\__, \___| \__\___/_||_\__|_| \___/_|_\___\__,_| >> |___/ >> ==================================================================== >> >> >> >> >> >> On Thu, Sep 4, 2014 at 7:18 PM, Chris Byrne <Chr...@ba...> >> wrote: >> >>> I would second that approach. >>> >>> >>> If you really want to go down the path of binding functions with more >>> than 10 arguments, then I think you need to define LUABIND_MAX_ARITY with a >>> value greater than 10. >>> >>> 10 being the default value if LUABIND_MAX_ARITY is not already defined: >>> https://github.com/luabind/luabind/blob/master/luabind/config.hpp >>> >>> This is used during pre-processing to expand out and provide the >>> necessary binding overloads (predating variadic templates). >>> >>> >>> I haven't tried this, so I can't promise that this is the only >>> definition (or even the correct one). There is likely a similar >>> limitation/definition within boost as well. >>> >>> >>> Kind Regards, >>> CB >>> >>> >>> On Thu, Sep 4, 2014 at 9:51 AM, Andreas Grob < >>> And...@tu...> wrote: >>> >>>> Hi, >>>> >>>> How about wrapping the whole L&F class to have a cleaner interface? You >>>> could store the original L&F inside that wrapper using pimpl and have a >>>> method to move it out. >>>> >>>> Regards, >>>> Andreas >>>> >>>> Am 04.09.2014 16:12, schrieb Roman Kubiak: >>>> >>>> Helo. >>>> >>>> >>>> I'm using a third party library for my application (JUCE), this library >>>> has a large class called LookAndFeel, i want to expose that class to lua >>>> via luabind. >>>> >>>> I started to do the work following the documentation, and using the >>>> luabind::wrap_base approach, i got a few methods bound and it's all working >>>> fine, until i hit a problem. Some of the methods in the original >>>> LookAndFeel class have more then 10 parameters, and i can't bind those >>>> methods using this approach. >>>> >>>> One of the solutions i found would be to change the parameters and >>>> wrap them in a structure, and that would be a good idea but i can't change >>>> the original LookAndFeel class, and changing the class that derives from >>>> luabind::wrap_base - that i'm implementing - so that it's methods take a >>>> structure as a parameter instead of the actual parameters, makes those >>>> methods unusable (luabind never calls them, since the parameter count and >>>> type does not match the original LookAndFeel class). >>>> >>>> Is there a way to solve this somehow, can i increase the limit of 10 >>>> parameters in luabind (trying to extend the ARITY macro over 10 causes >>>> loades of compile errors). >>>> >>>> Any help is welcome. >>>> >>>> My class looks like: >>>> class LLookAndFeel : public LookAndFeel_V3, public luabind::wrap_base >>>> { >>>> virtual void drawButtonBackground (Graphics &g, Button &b, const >>>> Colour &c, bool over, bool down) override >>>> { call<void>("drawButtonBackground", boost::ref (g), >>>> boost::ref(b), c, over, down); } >>>> static void def_drawButtonBackground (LookAndFeel_V3 *ptr, >>>> Graphics &g, Button &b, const Colour &c, bool over, bool down) >>>> { return (ptr->LookAndFeel_V3::drawButtonBackground >>>> (g,b,c,over,down)); } >>>> >>>> /* More methods are needed that have more then 10 parameters */ >>>> } >>>> >>>> Best regards. >>>> >>>> Roman Kubiak >>>> http://ctrlr.org >>>> ==================================================================== >>>> _ _ _ _ _ _ >>>> __ _____| | |_ __ _ __ _ ___ __ ___ _ _| |_ _ _ ___| | |___ __| | >>>> \ V / _ \ | _/ _` / _` / -_) / _/ _ \ ' \ _| '_/ _ \ | / -_) _` | >>>> \_/\___/_|\__\__,_\__, \___| \__\___/_||_\__|_| \___/_|_\___\__,_| >>>> |___/ >>>> ==================================================================== >>>> >>>> >>>> >>>> >>>> >>>> ------------------------------------------------------------------------------ >>>> Slashdot TV. >>>> Video for Nerds. Stuff that matters.http://tv.slashdot.org/ >>>> >>>> >>>> >>>> _______________________________________________ >>>> luabind-user mailing lis...@li...https://lists.sourceforge.net/lists/listinfo/luabind-user >>>> >>>> >>>> >>> >>> >>> ------------------------------------------------------------------------------ >>> Slashdot TV. >>> Video for Nerds. Stuff that matters. >>> http://tv.slashdot.org/ >>> _______________________________________________ >>> luabind-user mailing list >>> lua...@li... >>> https://lists.sourceforge.net/lists/listinfo/luabind-user >>> >>> >> > > > ------------------------------------------------------------------------------ > Slashdot TV. > Video for Nerds. Stuff that matters. > http://tv.slashdot.org/ > _______________________________________________ > luabind-user mailing list > lua...@li... > https://lists.sourceforge.net/lists/listinfo/luabind-user > > |
From: Chris B. <Chr...@ba...> - 2014-09-04 22:01:11
|
ok, I missed that last bit in your email. When changing LUABIND_MAX_ARITY to 20 there are indeed boost related compile errors. 2>s:\lib\luabind-0.9\luabind/detail/object_call.hpp(38): error C2977: 'boost::tuples::tuple' : too many template arguments 2> s:\lib\boost_1_46_1\boost/tuple/detail/tuple_basic.hpp(470) : see declaration of 'boost::tuples::tuple' 2> s:\lib\luabind-0.9\luabind/object.hpp(336) : see reference to class template instantiation 'luabind::adl::object_interface<T>' being compiled (excuse my super old versions of boost & luabind) Per: http://www.boost.org/doc/libs/1_56_0/libs/tuple/doc/tuple_users_guide.html *"The current version supports tuples with 0-10 elements"* and there's http://stackoverflow.com/questions/6425178/boost-tuple-increasing-maximum-number-of-elements which suggests a couple of options. i) Hack up tuple_basic.hpp and extend declarations out to the number of arguments you need ii) If your compiler(s) support variadic templates could consider changing luabind to use std::tuple iii) Changing luabind over to use boost::fusion::tuple which has a FUSION_MAX_VECTOR_SIZE definition Hard to know which is least effort. Sticking with boost (options i & iii) would be the most cross platform friendly (at least for now). Hacking up tuplic_basic.hpp is somewhat tedious and a quick search wasn't able to find someone who has already done this. Essentially involves extending out the number of template parameters: template < class T0 = null_type, class T1 = null_type, class T2 = null_type, class T3 = null_type, class T4 = null_type, class T5 = null_type, class T6 = null_type, class T7 = null_type, class T8 = null_type, class T9 = null_type, class T10 = null_type, class T11 = null_type, class T12 = null_type, class T13 = null_type, class T14 = null_type> class tuple; along with the several supporting classes: // Tuple to cons mapper -------------------------------------------------- template <class T0, class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11, class T12, class T13, class T14> struct map_tuple_to_cons - I would still recommend using a facade and avoid the need for more arguments. Kind Regards, CB On Thu, Sep 4, 2014 at 12:41 PM, Roman Kubiak <kub...@gm...> wrote: > Like i wrote, increasing that constant above 10 is impossible, you'll > get flooded with compile errors, if that constant goes above 10 something > needs to change in boost to handle that. My question what and how, i'm not > a big boost expert, i use it only for luabind so i was wondering if there > was a ready solution to get this working. > > cheers. > > ==================================================================== > _ _ _ _ _ _ > __ _____| | |_ __ _ __ _ ___ __ ___ _ _| |_ _ _ ___| | |___ __| | > \ V / _ \ | _/ _` / _` / -_) / _/ _ \ ' \ _| '_/ _ \ | / -_) _` | > \_/\___/_|\__\__,_\__, \___| \__\___/_||_\__|_| \___/_|_\___\__,_| > |___/ > ==================================================================== > > > > > > On Thu, Sep 4, 2014 at 7:18 PM, Chris Byrne <Chr...@ba...> wrote: > >> I would second that approach. >> >> >> If you really want to go down the path of binding functions with more >> than 10 arguments, then I think you need to define LUABIND_MAX_ARITY with a >> value greater than 10. >> >> 10 being the default value if LUABIND_MAX_ARITY is not already defined: >> https://github.com/luabind/luabind/blob/master/luabind/config.hpp >> >> This is used during pre-processing to expand out and provide the >> necessary binding overloads (predating variadic templates). >> >> >> I haven't tried this, so I can't promise that this is the only >> definition (or even the correct one). There is likely a similar >> limitation/definition within boost as well. >> >> >> Kind Regards, >> CB >> >> >> On Thu, Sep 4, 2014 at 9:51 AM, Andreas Grob < >> And...@tu...> wrote: >> >>> Hi, >>> >>> How about wrapping the whole L&F class to have a cleaner interface? You >>> could store the original L&F inside that wrapper using pimpl and have a >>> method to move it out. >>> >>> Regards, >>> Andreas >>> >>> Am 04.09.2014 16:12, schrieb Roman Kubiak: >>> >>> Helo. >>> >>> >>> I'm using a third party library for my application (JUCE), this library >>> has a large class called LookAndFeel, i want to expose that class to lua >>> via luabind. >>> >>> I started to do the work following the documentation, and using the >>> luabind::wrap_base approach, i got a few methods bound and it's all working >>> fine, until i hit a problem. Some of the methods in the original >>> LookAndFeel class have more then 10 parameters, and i can't bind those >>> methods using this approach. >>> >>> One of the solutions i found would be to change the parameters and >>> wrap them in a structure, and that would be a good idea but i can't change >>> the original LookAndFeel class, and changing the class that derives from >>> luabind::wrap_base - that i'm implementing - so that it's methods take a >>> structure as a parameter instead of the actual parameters, makes those >>> methods unusable (luabind never calls them, since the parameter count and >>> type does not match the original LookAndFeel class). >>> >>> Is there a way to solve this somehow, can i increase the limit of 10 >>> parameters in luabind (trying to extend the ARITY macro over 10 causes >>> loades of compile errors). >>> >>> Any help is welcome. >>> >>> My class looks like: >>> class LLookAndFeel : public LookAndFeel_V3, public luabind::wrap_base >>> { >>> virtual void drawButtonBackground (Graphics &g, Button &b, const >>> Colour &c, bool over, bool down) override >>> { call<void>("drawButtonBackground", boost::ref (g), >>> boost::ref(b), c, over, down); } >>> static void def_drawButtonBackground (LookAndFeel_V3 *ptr, >>> Graphics &g, Button &b, const Colour &c, bool over, bool down) >>> { return (ptr->LookAndFeel_V3::drawButtonBackground >>> (g,b,c,over,down)); } >>> >>> /* More methods are needed that have more then 10 parameters */ >>> } >>> >>> Best regards. >>> >>> Roman Kubiak >>> http://ctrlr.org >>> ==================================================================== >>> _ _ _ _ _ _ >>> __ _____| | |_ __ _ __ _ ___ __ ___ _ _| |_ _ _ ___| | |___ __| | >>> \ V / _ \ | _/ _` / _` / -_) / _/ _ \ ' \ _| '_/ _ \ | / -_) _` | >>> \_/\___/_|\__\__,_\__, \___| \__\___/_||_\__|_| \___/_|_\___\__,_| >>> |___/ >>> ==================================================================== >>> >>> >>> >>> >>> >>> ------------------------------------------------------------------------------ >>> Slashdot TV. >>> Video for Nerds. Stuff that matters.http://tv.slashdot.org/ >>> >>> >>> >>> _______________________________________________ >>> luabind-user mailing lis...@li...https://lists.sourceforge.net/lists/listinfo/luabind-user >>> >>> >>> >> >> >> ------------------------------------------------------------------------------ >> Slashdot TV. >> Video for Nerds. Stuff that matters. >> http://tv.slashdot.org/ >> _______________________________________________ >> luabind-user mailing list >> lua...@li... >> https://lists.sourceforge.net/lists/listinfo/luabind-user >> >> > |
From: Roman K. <kub...@gm...> - 2014-09-04 19:41:47
|
Like i wrote, increasing that constant above 10 is impossible, you'll get flooded with compile errors, if that constant goes above 10 something needs to change in boost to handle that. My question what and how, i'm not a big boost expert, i use it only for luabind so i was wondering if there was a ready solution to get this working. cheers. ==================================================================== _ _ _ _ _ _ __ _____| | |_ __ _ __ _ ___ __ ___ _ _| |_ _ _ ___| | |___ __| | \ V / _ \ | _/ _` / _` / -_) / _/ _ \ ' \ _| '_/ _ \ | / -_) _` | \_/\___/_|\__\__,_\__, \___| \__\___/_||_\__|_| \___/_|_\___\__,_| |___/ ==================================================================== On Thu, Sep 4, 2014 at 7:18 PM, Chris Byrne <Chr...@ba...> wrote: > I would second that approach. > > > If you really want to go down the path of binding functions with more than > 10 arguments, then I think you need to define LUABIND_MAX_ARITY with a > value greater than 10. > > 10 being the default value if LUABIND_MAX_ARITY is not already defined: > https://github.com/luabind/luabind/blob/master/luabind/config.hpp > > This is used during pre-processing to expand out and provide the necessary > binding overloads (predating variadic templates). > > > I haven't tried this, so I can't promise that this is the only definition > (or even the correct one). There is likely a similar limitation/definition > within boost as well. > > > Kind Regards, > CB > > > On Thu, Sep 4, 2014 at 9:51 AM, Andreas Grob <And...@tu...> > wrote: > >> Hi, >> >> How about wrapping the whole L&F class to have a cleaner interface? You >> could store the original L&F inside that wrapper using pimpl and have a >> method to move it out. >> >> Regards, >> Andreas >> >> Am 04.09.2014 16:12, schrieb Roman Kubiak: >> >> Helo. >> >> >> I'm using a third party library for my application (JUCE), this library >> has a large class called LookAndFeel, i want to expose that class to lua >> via luabind. >> >> I started to do the work following the documentation, and using the >> luabind::wrap_base approach, i got a few methods bound and it's all working >> fine, until i hit a problem. Some of the methods in the original >> LookAndFeel class have more then 10 parameters, and i can't bind those >> methods using this approach. >> >> One of the solutions i found would be to change the parameters and wrap >> them in a structure, and that would be a good idea but i can't change the >> original LookAndFeel class, and changing the class that derives from >> luabind::wrap_base - that i'm implementing - so that it's methods take a >> structure as a parameter instead of the actual parameters, makes those >> methods unusable (luabind never calls them, since the parameter count and >> type does not match the original LookAndFeel class). >> >> Is there a way to solve this somehow, can i increase the limit of 10 >> parameters in luabind (trying to extend the ARITY macro over 10 causes >> loades of compile errors). >> >> Any help is welcome. >> >> My class looks like: >> class LLookAndFeel : public LookAndFeel_V3, public luabind::wrap_base >> { >> virtual void drawButtonBackground (Graphics &g, Button &b, const >> Colour &c, bool over, bool down) override >> { call<void>("drawButtonBackground", boost::ref (g), >> boost::ref(b), c, over, down); } >> static void def_drawButtonBackground (LookAndFeel_V3 *ptr, >> Graphics &g, Button &b, const Colour &c, bool over, bool down) >> { return (ptr->LookAndFeel_V3::drawButtonBackground >> (g,b,c,over,down)); } >> >> /* More methods are needed that have more then 10 parameters */ >> } >> >> Best regards. >> >> Roman Kubiak >> http://ctrlr.org >> ==================================================================== >> _ _ _ _ _ _ >> __ _____| | |_ __ _ __ _ ___ __ ___ _ _| |_ _ _ ___| | |___ __| | >> \ V / _ \ | _/ _` / _` / -_) / _/ _ \ ' \ _| '_/ _ \ | / -_) _` | >> \_/\___/_|\__\__,_\__, \___| \__\___/_||_\__|_| \___/_|_\___\__,_| >> |___/ >> ==================================================================== >> >> >> >> >> >> ------------------------------------------------------------------------------ >> Slashdot TV. >> Video for Nerds. Stuff that matters.http://tv.slashdot.org/ >> >> >> >> _______________________________________________ >> luabind-user mailing lis...@li...https://lists.sourceforge.net/lists/listinfo/luabind-user >> >> >> > > > ------------------------------------------------------------------------------ > Slashdot TV. > Video for Nerds. Stuff that matters. > http://tv.slashdot.org/ > _______________________________________________ > luabind-user mailing list > lua...@li... > https://lists.sourceforge.net/lists/listinfo/luabind-user > > |
From: Chris B. <Chr...@ba...> - 2014-09-04 17:37:43
|
I would second that approach. If you really want to go down the path of binding functions with more than 10 arguments, then I think you need to define LUABIND_MAX_ARITY with a value greater than 10. 10 being the default value if LUABIND_MAX_ARITY is not already defined: https://github.com/luabind/luabind/blob/master/luabind/config.hpp This is used during pre-processing to expand out and provide the necessary binding overloads (predating variadic templates). I haven't tried this, so I can't promise that this is the only definition (or even the correct one). There is likely a similar limitation/definition within boost as well. Kind Regards, CB On Thu, Sep 4, 2014 at 9:51 AM, Andreas Grob <And...@tu...> wrote: > Hi, > > How about wrapping the whole L&F class to have a cleaner interface? You > could store the original L&F inside that wrapper using pimpl and have a > method to move it out. > > Regards, > Andreas > > Am 04.09.2014 16:12, schrieb Roman Kubiak: > > Helo. > > I'm using a third party library for my application (JUCE), this library > has a large class called LookAndFeel, i want to expose that class to lua > via luabind. > > I started to do the work following the documentation, and using the > luabind::wrap_base approach, i got a few methods bound and it's all working > fine, until i hit a problem. Some of the methods in the original > LookAndFeel class have more then 10 parameters, and i can't bind those > methods using this approach. > > One of the solutions i found would be to change the parameters and wrap > them in a structure, and that would be a good idea but i can't change the > original LookAndFeel class, and changing the class that derives from > luabind::wrap_base - that i'm implementing - so that it's methods take a > structure as a parameter instead of the actual parameters, makes those > methods unusable (luabind never calls them, since the parameter count and > type does not match the original LookAndFeel class). > > Is there a way to solve this somehow, can i increase the limit of 10 > parameters in luabind (trying to extend the ARITY macro over 10 causes > loades of compile errors). > > Any help is welcome. > > My class looks like: > class LLookAndFeel : public LookAndFeel_V3, public luabind::wrap_base > { > virtual void drawButtonBackground (Graphics &g, Button &b, const > Colour &c, bool over, bool down) override > { call<void>("drawButtonBackground", boost::ref (g), > boost::ref(b), c, over, down); } > static void def_drawButtonBackground (LookAndFeel_V3 *ptr, > Graphics &g, Button &b, const Colour &c, bool over, bool down) > { return (ptr->LookAndFeel_V3::drawButtonBackground > (g,b,c,over,down)); } > > /* More methods are needed that have more then 10 parameters */ > } > > Best regards. > > Roman Kubiak > http://ctrlr.org > ==================================================================== > _ _ _ _ _ _ > __ _____| | |_ __ _ __ _ ___ __ ___ _ _| |_ _ _ ___| | |___ __| | > \ V / _ \ | _/ _` / _` / -_) / _/ _ \ ' \ _| '_/ _ \ | / -_) _` | > \_/\___/_|\__\__,_\__, \___| \__\___/_||_\__|_| \___/_|_\___\__,_| > |___/ > ==================================================================== > > > > > > ------------------------------------------------------------------------------ > Slashdot TV. > Video for Nerds. Stuff that matters.http://tv.slashdot.org/ > > > > _______________________________________________ > luabind-user mailing lis...@li...https://lists.sourceforge.net/lists/listinfo/luabind-user > > > |
From: Andreas G. <And...@tu...> - 2014-09-04 16:51:15
|
Hi, How about wrapping the whole L&F class to have a cleaner interface? You could store the original L&F inside that wrapper using pimpl and have a method to move it out. Regards, Andreas Am 04.09.2014 16:12, schrieb Roman Kubiak: > Helo. > > I'm using a third party library for my application (JUCE), this > library has a large class called LookAndFeel, i want to expose that > class to lua via luabind. > > I started to do the work following the documentation, and using the > luabind::wrap_base approach, i got a few methods bound and it's all > working fine, until i hit a problem. Some of the methods in the > original LookAndFeel class have more then 10 parameters, and i can't > bind those methods using this approach. > > One of the solutions i found would be to change the parameters and > wrap them in a structure, and that would be a good idea but i can't > change the original LookAndFeel class, and changing the class that > derives from luabind::wrap_base - that i'm implementing - so that it's > methods take a structure as a parameter instead of the actual > parameters, makes those methods unusable (luabind never calls them, > since the parameter count and type does not match the original > LookAndFeel class). > > Is there a way to solve this somehow, can i increase the limit of 10 > parameters in luabind (trying to extend the ARITY macro over 10 causes > loades of compile errors). > > Any help is welcome. > > My class looks like: > class LLookAndFeel : public LookAndFeel_V3, public luabind::wrap_base > { > virtual void drawButtonBackground (Graphics &g, Button &b, const > Colour &c, bool over, bool down) override > { call<void>("drawButtonBackground", boost::ref (g), > boost::ref(b), c, over, down); } > static void def_drawButtonBackground (LookAndFeel_V3 *ptr, > Graphics &g, Button &b, const Colour &c, bool over, bool down) > { return (ptr->LookAndFeel_V3::drawButtonBackground > (g,b,c,over,down)); } > > /* More methods are needed that have more then 10 parameters */ > } > > Best regards. > > Roman Kubiak > http://ctrlr.org > ==================================================================== > _ _ _ _ _ _ > __ _____| | |_ __ _ __ _ ___ __ ___ _ _| |_ _ _ ___| | |___ __| | > \ V / _ \ | _/ _` / _` / -_) / _/ _ \ ' \ _| '_/ _ \ | / -_) _` | > \_/\___/_|\__\__,_\__, \___| \__\___/_||_\__|_| \___/_|_\___\__,_| > |___/ > ==================================================================== > > > > > > ------------------------------------------------------------------------------ > Slashdot TV. > Video for Nerds. Stuff that matters. > http://tv.slashdot.org/ > > > _______________________________________________ > luabind-user mailing list > lua...@li... > https://lists.sourceforge.net/lists/listinfo/luabind-user --- Diese E-Mail ist frei von Viren und Malware, denn der avast! Antivirus Schutz ist aktiv. http://www.avast.com |
From: Roman K. <kub...@gm...> - 2014-09-04 14:12:41
|
Helo. I'm using a third party library for my application (JUCE), this library has a large class called LookAndFeel, i want to expose that class to lua via luabind. I started to do the work following the documentation, and using the luabind::wrap_base approach, i got a few methods bound and it's all working fine, until i hit a problem. Some of the methods in the original LookAndFeel class have more then 10 parameters, and i can't bind those methods using this approach. One of the solutions i found would be to change the parameters and wrap them in a structure, and that would be a good idea but i can't change the original LookAndFeel class, and changing the class that derives from luabind::wrap_base - that i'm implementing - so that it's methods take a structure as a parameter instead of the actual parameters, makes those methods unusable (luabind never calls them, since the parameter count and type does not match the original LookAndFeel class). Is there a way to solve this somehow, can i increase the limit of 10 parameters in luabind (trying to extend the ARITY macro over 10 causes loades of compile errors). Any help is welcome. My class looks like: class LLookAndFeel : public LookAndFeel_V3, public luabind::wrap_base { virtual void drawButtonBackground (Graphics &g, Button &b, const Colour &c, bool over, bool down) override { call<void>("drawButtonBackground", boost::ref (g), boost::ref(b), c, over, down); } static void def_drawButtonBackground (LookAndFeel_V3 *ptr, Graphics &g, Button &b, const Colour &c, bool over, bool down) { return (ptr->LookAndFeel_V3::drawButtonBackground (g,b,c,over,down)); } /* More methods are needed that have more then 10 parameters */ } Best regards. Roman Kubiak http://ctrlr.org ==================================================================== _ _ _ _ _ _ __ _____| | |_ __ _ __ _ ___ __ ___ _ _| |_ _ _ ___| | |___ __| | \ V / _ \ | _/ _` / _` / -_) / _/ _ \ ' \ _| '_/ _ \ | / -_) _` | \_/\___/_|\__\__,_\__, \___| \__\___/_||_\__|_| \___/_|_\___\__,_| |___/ ==================================================================== |
From: 1 1 <roa...@gm...> - 2014-08-07 13:29:17
|
Thank you for your answer, Michael! On 7 Aug 2014 16:21, "Michael Steinberg" <mic...@tu...> wrote: > Hello, > > It is impossible to pass object types that are modelled in lua with > built-in types by reference. In Lua, there exists no attribute to types > like reference or value type. A type is either a reference type (tables), > or a value type (built-in types like number). > What you can do however is return the new value in the lua-side. A policy > could be established, that transforms reference integral types to a list of > parsed return types, so it is transparent on the c++ side. That would place > hard constraints on the lua side though. > > Kind regards, > Michael > > Am 03.08.2014 21:09, schrieb 1 1: > > When programming on C++, you can do the following: > > void byReference(int &y){ > y = 5;} > int main(){ > int x = 2; // x = 2 > byReference(x); // x = 5} > > How to do the same using luabind? > > Luabind docs says > <http://www.rasterbar.com/products/luabind/docs.html#calling-lua-functions> > : > > If you want to pass a parameter as a reference, you have to wrap it with > the Boost.Ref. > > Like this: > > int ret = call_function(L, "fun", boost::ref(val)); > > But when I'm trying to do this: > > #include <iostream>#include <conio.h> > extern "C" { > #include "lua.h" > #include "lualib.h" > #include "lauxlib.h"} > #include <luabind\luabind.hpp> > using namespace std;using namespace luabind; > int main() { > lua_State *myLuaState = luaL_newstate(); > open(myLuaState); > int x = 2; > > > do > { > luaL_dofile(myLuaState, "script.lua"); > cout<<"x before = "<< x <<endl; > > try > { > call_function<void>(myLuaState, "test", boost::ref(x)); > } > catch(const std::exception &TheError) > { > cerr << TheError.what() << endl; > > } > cout<<"x after = "<< x <<endl; > > } while(_getch() != 27); > > lua_close(myLuaState);} > > script.lua: > > function test(x) > x = 7end > > It gives me a "Trying to use unregistered class" error. > > So, how to pass value from C++ to lua function by reference, so I can > change it inside the script and it will be changed in c++ program too? I'm > using boost 1.55.0, lua 5.1, luabind 0.9.1 > > Thanks. > P.S: > I posted the same question on StackOverflow > <http://stackoverflow.com/questions/25099437/luabind-how-to-pass-value-from-c-to-lua-function-by-reference>, > but seems like nobody knows what to do. > > > ------------------------------------------------------------------------------ > Want fast and easy access to all the code in your enterprise? Index and > search up to 200,000 lines of code with a free copy of Black Duck > Code Sight - the same software that powers the world's largest code > search on Ohloh, the Black Duck Open Hub! Try it now.http://p.sf.net/sfu/bds > > > > _______________________________________________ > luabind-user mailing lis...@li...https://lists.sourceforge.net/lists/listinfo/luabind-user > > > > > ------------------------------------------------------------------------------ > Infragistics Professional > Build stunning WinForms apps today! > Reboot your WinForms applications with our WinForms controls. > Build a bridge from your legacy apps to the future. > > http://pubads.g.doubleclick.net/gampad/clk?id=153845071&iu=/4140/ostg.clktrk > _______________________________________________ > luabind-user mailing list > lua...@li... > https://lists.sourceforge.net/lists/listinfo/luabind-user > > |
From: Michael S. <mic...@tu...> - 2014-08-07 13:20:13
|
Hello, It is impossible to pass object types that are modelled in lua with built-in types by reference. In Lua, there exists no attribute to types like reference or value type. A type is either a reference type (tables), or a value type (built-in types like number). What you can do however is return the new value in the lua-side. A policy could be established, that transforms reference integral types to a list of parsed return types, so it is transparent on the c++ side. That would place hard constraints on the lua side though. Kind regards, Michael Am 03.08.2014 21:09, schrieb 1 1: > > When programming on C++, you can do the following: > > |void byReference(int &y) > { > y = 5; > } > > int main() > { > int x = 2; // x = 2 > byReference(x); // x = 5 > }| > > How to do the same using luabind? > > Luabind docs says > <http://www.rasterbar.com/products/luabind/docs.html#calling-lua-functions>: > > If you want to pass a parameter as a reference, you have to wrap > it with the |Boost.Ref|. > > Like this: > > |int ret = call_function(L, "fun", boost::ref(val));| > > But when I'm trying to do this: > > |#include <iostream> > #include <conio.h> > > extern "C" > { > #include "lua.h" > #include "lualib.h" > #include "lauxlib.h" > } > > #include <luabind\luabind.hpp> > > using namespace std; > using namespace luabind; > > int main() > { > lua_State *myLuaState = luaL_newstate(); > open(myLuaState); > > int x = 2; > > > do > { > luaL_dofile(myLuaState, "script.lua"); > > cout<<"x before = "<< x <<endl; > > > try > { > call_function<void>(myLuaState, "test", boost::ref(x)); > } > catch(const std::exception &TheError) > { > cerr << TheError.what() << endl; > > } > > cout<<"x after = "<< x <<endl; > > > } while(_getch() != 27); > > > lua_close(myLuaState); > }||| > > script.lua: > > |function test(x) > x = 7 > end| > > It gives me a |"Trying to use unregistered class"| error. > > So, how to pass value from C++ to lua function by reference, so I can > change it inside the script and it will be changed in c++ program too? > I'm using boost 1.55.0, lua 5.1, luabind 0.9.1 > > Thanks. > > P.S: > I posted the same question on StackOverflow > <http://stackoverflow.com/questions/25099437/luabind-how-to-pass-value-from-c-to-lua-function-by-reference>, > but seems like nobody knows what to do. > > > ------------------------------------------------------------------------------ > Want fast and easy access to all the code in your enterprise? Index and > search up to 200,000 lines of code with a free copy of Black Duck > Code Sight - the same software that powers the world's largest code > search on Ohloh, the Black Duck Open Hub! Try it now. > http://p.sf.net/sfu/bds > > > _______________________________________________ > luabind-user mailing list > lua...@li... > https://lists.sourceforge.net/lists/listinfo/luabind-user |
From: 1 1 <roa...@gm...> - 2014-08-03 19:10:04
|
When programming on C++, you can do the following: void byReference(int &y){ y = 5;} int main(){ int x = 2; // x = 2 byReference(x); // x = 5} How to do the same using luabind? Luabind docs says <http://www.rasterbar.com/products/luabind/docs.html#calling-lua-functions>: If you want to pass a parameter as a reference, you have to wrap it with the Boost.Ref. Like this: int ret = call_function(L, "fun", boost::ref(val)); But when I'm trying to do this: #include <iostream>#include <conio.h> extern "C" { #include "lua.h" #include "lualib.h" #include "lauxlib.h"} #include <luabind\luabind.hpp> using namespace std;using namespace luabind; int main() { lua_State *myLuaState = luaL_newstate(); open(myLuaState); int x = 2; do { luaL_dofile(myLuaState, "script.lua"); cout<<"x before = "<< x <<endl; try { call_function<void>(myLuaState, "test", boost::ref(x)); } catch(const std::exception &TheError) { cerr << TheError.what() << endl; } cout<<"x after = "<< x <<endl; } while(_getch() != 27); lua_close(myLuaState);} script.lua: function test(x) x = 7end It gives me a "Trying to use unregistered class" error. So, how to pass value from C++ to lua function by reference, so I can change it inside the script and it will be changed in c++ program too? I'm using boost 1.55.0, lua 5.1, luabind 0.9.1 Thanks. P.S: I posted the same question on StackOverflow <http://stackoverflow.com/questions/25099437/luabind-how-to-pass-value-from-c-to-lua-function-by-reference>, but seems like nobody knows what to do. |
From: Rodrigo 'S. D. <cod...@gm...> - 2014-05-29 16:49:20
|
awesome! really a great job! I'll port my project that use luabind to lua-cxx soon http://www.nullonerror.org/ -- flipping bits whilst updating pixels On Wed, May 28, 2014 at 8:53 PM, Aaron Faanes <da...@gm...> wrote: > Hello! > > I would like to share Lua-cxx, a MIT-licensed project that I wrote that aids > in writing modules and bindings for Lua. I posted this to the Lua mailing > list, but I figured those > who use Luabind would be interested to see another C++ take on Lua's API, so > I decided to post here as well. :) > > Compared to Luabind, Lua-cxx is lower-level. Lua-cxx does not introduce an > object model for Lua, nor does it use Luabind's policy model for arguments. > It does use templates widely, including those features like variadic > templates added in C++11, to provide a similar level of expressive power as > Luabind. > > Lua-cxx, like Luabind, doesn't provide a complete façade over Lua's C API. > On the contrary, I find Lua's C API to be amazingly well-designed, so I've > tried to ensure that Lua-cxx can be intermixed freely with Lua's C API. In > fact, most of the Lua C API has no analog in Lua-cxx - I just use the > original. ;) > > // Add all arguments > int add_several(lua::state* const state) > { > // Get each argument > int sum = 0; > for (int i = 1; i <= lua_gettop(state); ++i) { > sum += lua::get<int>(state, i); > } > > // Return the value > lua::push(state, sum); > lua_replace(state, 1); > return 1; > } > > That being said, there are several places where Lua-cxx greatly simplify > common tasks. For instance, Lua has a number of lua_push* functions that can > be replaced with Lua-cxx's lua::push template and appropriate > specializations. You can extend this specialization with your own types, and > Lua-cxx's other features will immediately support them. > > C++11 added variadic templates, which can be used to provide a way to push a > function of any arity into Lua without needing to write the marshalling code > yourself or running a preprocessor: > > // Standard C API is, of course, supported > int create_foo(lua::state* const); > lua::push(state, create_foo); > > // Fundamental types work, too > int sum(int a, int b); > lua::push(state, sum); > > // As are pointers to userdata and conversions to C++ strings. > void changeTitle(QWindow* window, const std::string& title); > lua::push(state, changeTitle); > > // Even lambdas work too, with a bit of help > lua::push_function< int(int, int) >(state, [](int first, int second) { > return first + second; > }); > > Beyond this, Lua-cxx also has out-of-the-box support for Qt's QObject model, > as well as rudimentary support for Gtk's GObject model, so you can push > these types and their properties and methods will automatically be exposed > to Lua. You can then specialize further on a specific subtype to add > behavior not provided by that library's metadata. > > Here's a simple example of what can be done: > > // Create a new Lua environment to play with. > auto env = lua::create(); > > // Introduce a global into Lua > env["foo"] = "No time"; > > // Run some Lua code directly > lua::run_string("assert(foo == 'No time')"); > > // Retrieve a global > auto value = env["foo"].get<std::string>(); > > And here's another, more complex variant that shows how a Lua module for > Qt's QWindow class could be created: > > #include <luacxx/stack.hpp> > #include <luacxx/type/standard.hpp> > #include <luacxx/type/function.hpp> > > #include <QWindow> > > int QWindow_new(lua::state* const state) > { > if (lua_gettop(state) > 1) { > auto parent = lua::get<QObject*>(state, 2); > lua_settop(state, 0); > > if (parent) { > if (parent->inherits("QWindow")) { > lua::make<QWindow>(state, > static_cast<QWindow*>(parent)); > } else { > lua::make<QWindow>(state, > static_cast<QScreen*>(parent)); > } > return 1; > } > > // Otherwise, fall through > } > > // Create a QWindow within Lua > lua::make<QWindow>(state, static_cast<QWindow*>(nullptr)); > return 1; > } > > int luaopen_QWindow(lua::state* const state) > { > lua::thread env(state); > > env["QWindow"] = lua::value::table; > env["QWindow"]["new"] = QWindow_new; > > return 1; > } > > // Within Lua > > require "QWindow"; > > local window = QWindow:new(); > window.width = 300; > window.height = 300; > window.title = "Hello, world"; > window:show(); > > I've tried to document it well and keep things tidy. The source in total is > almost 7,000 lines including documentation and unit tests. The documentation > for each file can be formatted for easier viewing using the tiny bash script > called cpod. It's in ./src. It just does a few regexes to make the source > look like perldoc and calls that, so you'll need that too. > > Thanks for reading; I hope you take a look! The documentation in > src/stack.hpp or perhaps the unit tests in src/tests/core.cpp are good first > places to start. > > https://github.com/dafrito/lua-cxx.git > > -- Aaron > > -- > Aaron Faanes <da...@gm...> > > ------------------------------------------------------------------------------ > Time is money. Stop wasting it! Get your web API in 5 minutes. > www.restlet.com/download > http://p.sf.net/sfu/restlet > _______________________________________________ > luabind-user mailing list > lua...@li... > https://lists.sourceforge.net/lists/listinfo/luabind-user > |
From: Aaron F. <da...@gm...> - 2014-05-28 23:54:02
|
Hello! I would like to share Lua-cxx, a MIT-licensed project that I wrote that aids in writing modules and bindings for Lua. I posted this to the Lua mailing list, but I figured those who use Luabind would be interested to see another C++ take on Lua's API, so I decided to post here as well. :) Compared to Luabind, Lua-cxx is lower-level. Lua-cxx does not introduce an object model for Lua, nor does it use Luabind's policy model for arguments. It does use templates widely, including those features like variadic templates added in C++11, to provide a similar level of expressive power as Luabind. Lua-cxx, like Luabind, doesn't provide a complete façade over Lua's C API. On the contrary, I find Lua's C API to be amazingly well-designed, so I've tried to ensure that Lua-cxx can be intermixed freely with Lua's C API. In fact, most of the Lua C API has no analog in Lua-cxx - I just use the original. ;) // Add all arguments int add_several(lua::state* const state) { // Get each argument int sum = 0; for (int i = 1; i <= lua_gettop(state); ++i) { sum += lua::get<int>(state, i); } // Return the value lua::push(state, sum); lua_replace(state, 1); return 1; } That being said, there are several places where Lua-cxx greatly simplify common tasks. For instance, Lua has a number of lua_push* functions that can be replaced with Lua-cxx's lua::push template and appropriate specializations. You can extend this specialization with your own types, and Lua-cxx's other features will immediately support them. C++11 added variadic templates, which can be used to provide a way to push a function of any arity into Lua without needing to write the marshalling code yourself or running a preprocessor: // Standard C API is, of course, supported int create_foo(lua::state* const); lua::push(state, create_foo); // Fundamental types work, too int sum(int a, int b); lua::push(state, sum); // As are pointers to userdata and conversions to C++ strings. void changeTitle(QWindow* window, const std::string& title); lua::push(state, changeTitle); // Even lambdas work too, with a bit of help lua::push_function< int(int, int) >(state, [](int first, int second) { return first + second; }); Beyond this, Lua-cxx also has out-of-the-box support for Qt's QObject model, as well as rudimentary support for Gtk's GObject model, so you can push these types and their properties and methods will automatically be exposed to Lua. You can then specialize further on a specific subtype to add behavior not provided by that library's metadata. Here's a simple example of what can be done: // Create a new Lua environment to play with. auto env = lua::create(); // Introduce a global into Lua env["foo"] = "No time"; // Run some Lua code directly lua::run_string("assert(foo == 'No time')"); // Retrieve a global auto value = env["foo"].get<std::string>(); And here's another, more complex variant that shows how a Lua module for Qt's QWindow class could be created: #include <luacxx/stack.hpp> #include <luacxx/type/standard.hpp> #include <luacxx/type/function.hpp> #include <QWindow> int QWindow_new(lua::state* const state) { if (lua_gettop(state) > 1) { auto parent = lua::get<QObject*>(state, 2); lua_settop(state, 0); if (parent) { if (parent->inherits("QWindow")) { lua::make<QWindow>(state, static_cast<QWindow*>(parent)); } else { lua::make<QWindow>(state, static_cast<QScreen*>(parent)); } return 1; } // Otherwise, fall through } // Create a QWindow within Lua lua::make<QWindow>(state, static_cast<QWindow*>(nullptr)); return 1; } int luaopen_QWindow(lua::state* const state) { lua::thread env(state); env["QWindow"] = lua::value::table; env["QWindow"]["new"] = QWindow_new; return 1; } // Within Lua require "QWindow"; local window = QWindow:new(); window.width = 300; window.height = 300; window.title = "Hello, world"; window:show(); I've tried to document it well and keep things tidy. The source in total is almost 7,000 lines including documentation and unit tests. The documentation for each file can be formatted for easier viewing using the tiny bash script called cpod. It's in ./src. It just does a few regexes to make the source look like perldoc and calls that, so you'll need that too. Thanks for reading; I hope you take a look! The documentation in src/stack.hpp or perhaps the unit tests in src/tests/core.cpp are good first places to start. https://github.com/dafrito/lua-cxx.git -- Aaron -- Aaron Faanes <da...@gm...> |
From: Henrique <hen...@gm...> - 2014-05-12 01:39:38
|
Hello there, I've been trying to create a callback for a button using luabind, but when a click the buttons I get a segfault. Here is the function i use to register the C++ functions to lua: void Callback::registerCallbacks( lua_State *L ) { using namespace luabind; module( L ) [ namespace_("Callback")[ def( "game_quit", &Callback::game_quit ), def( "game_start", &Callback::game_start ), def( "game_load", &Callback::game_load ), def( "start_battle", &Callback::start_battle ) ] ]; } This is how i retrieve the function from lua: typedef LuaFunction luabind::object; cbk = new LuaFunction( button.getLuaType ); button is of class LuaTable, a wrapper I've made for luabind::object. cbk is a pointer to a luabind::object. if I use (*cbk)(); right after, the function runs fine. But then, I send cbk to a Button constructor which does: callback = cbk; And when callback is called inside the button: void Button::activate(){ activated = 8; (*callback)(); } I get a segmentation fault. Thanks. |
From: Glen F. <hol...@gm...> - 2014-05-07 15:47:32
|
Hi there, I'm trying to see if there is anything wrong with returning a table of values, where the values are C++ objects (created on the stack -- do they get copied so that Lua "owns" them?). If they were really referenced on the stack, I'd expect them to be invalid, or for the program to crash, when I use the returned values much later in Lua code. But all seems to work, with no crashes, no obvious memory leaks after running for many iterations, and the returned objects contain the expected data. Is this "okay" to do? (contrived example, but essentially doing the same as my real code) luabind::object returnObjects() { luabind::object retTable = luabind::newtable(getLuaInstance()); for (size_t i = 0; i < 10; ++i) { retTable[i+1] = SomeClass("some initialization data", i); } return retTable; } returnObjects is registered like this: def("returnObjects", &returnObjects), // ... SomeClass is registered like this: class_<SomeClass>("SomeClass") .def(constructor<>()) .def(constructor<string, int>()) // ... I know I could register SomeClass to be held in a smart pointer, then have returnObjects return an STL vector of them (using the return_stl_iterator policy), but I'd like to understand what is going on with the above code, because as I say, it seems to work fine. Is there any problem with returning non-primitive objects this way (in a table)? Is each object copied, so Lua has its own instance? Instead of a Lua table, first I tried the same returning a vector of SomeClass (not of SomeClass pointers), and using the return_stl_iterator policy, but the objects must have been freed back by the time I was back in Lua-land(?), because iterating over the returned vector in Lua showed the instances contained garbage values. Is what I'm doing above correct, or is there a better way? Thanks, Glen. |
From: Michael S. <mic...@tu...> - 2014-02-20 15:56:39
|
Am 20.02.2014 16:40, schrieb Nicolas: > |In file included from ../test/test_exception_handlers.cpp:7: > In file included from ../luabind/luabind.hpp:27: > In file included from ../luabind/class.hpp:89: > ../luabind/function.hpp:28:43: error: no matching function for call to 'deduce_signature' > object fn = make_function(L, f, deduce_signature(f), policies); > ^~~~~~~~~~~~~~~~ > ...... > ../luabind/detail/deduce_signature.hpp:60:1: note: candidate function template not viable: requires 2 arguments, but 1 was provided > deduce_signature(F, Wrapped*) > ^| Does this come off either "raise" or "raise_derived" definitions? That implicit attribute "noreturn" generated (I assume that is generated because clang detected these functions will never return) seems to prevent the match to "void (*)()" (but would match to a generic template type F). I wonder if what clang does there is legal (ie. mismatch due to implicitly added attribute)? |
From: Teto <mat...@gm...> - 2014-02-17 17:42:24
|
Thanks for your answer, I will try it then and send feedback if I have errors/patches 2014-02-17 18:38 GMT+01:00 Ryan Pavlik <rp...@ia...>: > FYI, you can test with gcc c++11 on Windows pretty easily with this MinGW > distribution: http://nuwen.net/mingw.html > > > On Sat, Feb 15, 2014 at 3:12 PM, Michael Steinberg > <mic...@tu...> wrote: >> >> Hello, >> I am still here, I will be working on it for sure. The lib is in my >> active source base and I made some quick fixups there, too, however it's >> still a "floating" version, with lua side deriving impossible. I'm >> currently being driven nuts with day to day work and finishing on that >> software project. So I cannot spend the time I would like (or rather >> "any" reasonable time). >> That being said, when I'm done with this 'sprint', I want to enable >> dynamic properties in my client app, so "SomeObject.Foo" will yield a >> meta-table call with parameter "Foo", so that will probably be the time >> when I get this cleaned up. >> I was not looking into the repo for long to avoid the panics that people >> are waiting... I have enough people waiting already... >> Sorry for the silence! >> >> Kind regards, >> Michal >> >> >> ------------------------------------------------------------------------------ >> Android apps run on BlackBerry 10 >> Introducing the new BlackBerry 10.2.1 Runtime for Android apps. >> Now with support for Jelly Bean, Bluetooth, Mapview and more. >> Get your Android app in front of a whole new audience. Start now. >> >> http://pubads.g.doubleclick.net/gampad/clk?id=124407151&iu=/4140/ostg.clktrk >> _______________________________________________ >> luabind-user mailing list >> lua...@li... >> https://lists.sourceforge.net/lists/listinfo/luabind-user > > > > > -- > Ryan Pavlik > HCI Graduate Student > Virtual Reality Applications Center > Iowa State University > > rp...@ia... > http://academic.cleardefinition.com |
From: Ryan P. <rp...@ia...> - 2014-02-17 17:38:35
|
FYI, you can test with gcc c++11 on Windows pretty easily with this MinGW distribution: http://nuwen.net/mingw.html On Sat, Feb 15, 2014 at 3:12 PM, Michael Steinberg < mic...@tu...> wrote: > Hello, > I am still here, I will be working on it for sure. The lib is in my > active source base and I made some quick fixups there, too, however it's > still a "floating" version, with lua side deriving impossible. I'm > currently being driven nuts with day to day work and finishing on that > software project. So I cannot spend the time I would like (or rather > "any" reasonable time). > That being said, when I'm done with this 'sprint', I want to enable > dynamic properties in my client app, so "SomeObject.Foo" will yield a > meta-table call with parameter "Foo", so that will probably be the time > when I get this cleaned up. > I was not looking into the repo for long to avoid the panics that people > are waiting... I have enough people waiting already... > Sorry for the silence! > > Kind regards, > Michal > > > ------------------------------------------------------------------------------ > Android apps run on BlackBerry 10 > Introducing the new BlackBerry 10.2.1 Runtime for Android apps. > Now with support for Jelly Bean, Bluetooth, Mapview and more. > Get your Android app in front of a whole new audience. Start now. > > http://pubads.g.doubleclick.net/gampad/clk?id=124407151&iu=/4140/ostg.clktrk > _______________________________________________ > luabind-user mailing list > lua...@li... > https://lists.sourceforge.net/lists/listinfo/luabind-user > -- Ryan Pavlik HCI Graduate Student Virtual Reality Applications Center Iowa State University rp...@ia... http://academic.cleardefinition.com |
From: Michael S. <mic...@tu...> - 2014-02-15 21:12:42
|
Hello, I am still here, I will be working on it for sure. The lib is in my active source base and I made some quick fixups there, too, however it's still a "floating" version, with lua side deriving impossible. I'm currently being driven nuts with day to day work and finishing on that software project. So I cannot spend the time I would like (or rather "any" reasonable time). That being said, when I'm done with this 'sprint', I want to enable dynamic properties in my client app, so "SomeObject.Foo" will yield a meta-table call with parameter "Foo", so that will probably be the time when I get this cleaned up. I was not looking into the repo for long to avoid the panics that people are waiting... I have enough people waiting already... Sorry for the silence! Kind regards, Michal |
From: Willi S. <wi...@sc...> - 2014-02-15 16:53:33
|
Am 2/15/2014 5:00 PM, schrieb Teto: > Was wondering what was the status on this. Do you keep working on it ? > last commit is 4 months old and I've seen some forks, one of them > looks interesting. Status on what? The C++11 fork or my Android compile experiments? (Since you quoted me, but that was presumably just because it was the last message in the conversation?) I haven't investigated the Android compile further and I know as little about the C++11 fork as you do. Willi |
From: Teto <mat...@gm...> - 2014-02-15 16:00:46
|
Was wondering what was the status on this. Do you keep working on it ? last commit is 4 months old and I've seen some forks, one of them looks interesting. 2013-09-28 11:27 GMT+02:00 Willi Schinmeyer <wi...@sc...>: > I downloaded it sometime in the afternoon - judging from your name > you're probably German as well so we likely share a timezone, so chances > are I didn't have the latest version. I'll try again later, using 4.8 as > well. > > Circular dependencies are indeed something I thought of as well but > didn't want to investigate at the time. > > Willi > > ------------------------------------------------------------------------------ > October Webinars: Code for Performance > Free Intel webinars can help you accelerate application performance. > Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from > the latest Intel processors and coprocessors. See abstracts and register > > http://pubads.g.doubleclick.net/gampad/clk?id=60133471&iu=/4140/ostg.clktrk > _______________________________________________ > luabind-user mailing list > lua...@li... > https://lists.sourceforge.net/lists/listinfo/luabind-user |
From: <Aru...@hi...> - 2014-01-08 17:56:05
|
Hi, I want to add support to a user type in luabind, so that I can assign c++ variables of the type to lua variables like so: struct UserType{..}; //and then do UserType u; luabind::globals(L)["UserTypeList"]["a"] = u; //equivalent to saying UserTypeList.a = u in Lua. I registered the class type via luabind::class_ and specialized the default_converter for the type : module(L)[ class_< UserType>("_ UserType")]; namespace luabind{ template<> struct default_converter< UserType> : native_converter_base< UserType> { //define compute_score, to and from functions. }; } But when I actually do the assignment, the converter code doesn't get called. I'm expecting the 'to' function in the converter to get called, since I'm assigning a custom type to a lua object, which doesn't happen. Is this the correct way to do this. Please let me know if you find any issues with this setup. Thanks arun. |
From: Thibault E. <thi...@gm...> - 2013-11-14 13:47:13
|
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, |
From: Glen F <hol...@gm...> - 2013-10-26 19:51:13
|
Thanks, that seems to do the trick. Glen. On 26/10/2013, at 20:46, "Christian" <cn...@gm...> wrote: > Catching the error with pcall (and maybe checking if the error message is an expected one) is the only solution I can think of. > > From: Glen Fraser [mailto:hol...@gm...] > Sent: Saturday, October 26, 2013 7:45 PM > To: lua...@li... > Subject: [luabind] Test for key on luabind class (userdata vs table?) > > Hi there, I know it's possible to set "properties" on luabind classes in Lua. You can set and get these keys, no problem. However, it doesn't seem possible to "get" (or test for the existence of) an unset key -- you'd expect it to return 'nil', but it crashes. Is there a way to test a luabind class for the existence of a key (as though it were a table), without crashing? > > [snip] > > Thanks, > Glen. |
From: Christian <cn...@gm...> - 2013-10-26 18:46:49
|
Catching the error with pcall (and maybe checking if the error message is an expected one) is the only solution I can think of. From: Glen Fraser [mailto:hol...@gm...] Sent: Saturday, October 26, 2013 7:45 PM To: lua...@li... Subject: [luabind] Test for key on luabind class (userdata vs table?) Hi there, I know it's possible to set "properties" on luabind classes in Lua. You can set and get these keys, no problem. However, it doesn't seem possible to "get" (or test for the existence of) an unset key -- you'd expect it to return 'nil', but it crashes. Is there a way to test a luabind class for the existence of a key (as though it were a table), without crashing? [snip] Thanks, Glen. |