Re: Re move an object from the lua state!
Andreas Grob <[email protected]> Tue, 02 Aug 2011 11:15:20 +0200
| Newsgroups | gmane.comp.lang.lua.bind.user |
|---|---|
| Message-ID | <[email protected]> |
Hi,
if you really want to transfer ownership from lua to c++, you can use
the adopt policy.
There is an example in the documentation:
http://www.rasterbar.com/products/luabind/docs.html#adopt
Regards,
Andreas
Am 02.08.2011 06:37, schrieb Sympaval:
> Hi all!
>
> I a problem since two days now, while integreting lua to C++. I look at all
> message corresponding to that issue here, but the answers are not clearly
> explaned to help me, and here I would like to get the ritght way to achieve
> what I would like to do.
>
> In fact I have a c++ class wraped with luabind and exported to lua. I would
> like to be able to create a new instance of my class in lua, get it and
> delete it from c++.
> Actually i can create new instances of my object, and delete them without
> problem, but when I close the lua state with lua_close(myLuaState), the
> programme segfault. When i comment thje lua_close function all thinks are
> ok. I realise that it's beacause when the lua_close is called, it tries to
> call the destructor of all objects in the lua state.
> Then I would like to delete the object from the c++ side when i want, and
> remove it from the lua state. How can i achieve that?
> This question has been already posted here in another way, but i didn't find
> a answer which solve my problem.
> I read the programming in lua documentation but I do not see how to proceed.
> This is my code.
>
> extern "C" {
> #include <lua.h>
> }
>
> #include <iostream>
> #include <lua.hpp>
> #include <luabind.hpp>
> #include <stdio.h>
>
> class Enemy {
> private:
> std::string name;
>
> public:
> Enemy(const std::string& n)
> : name(n)
> {
> std::cout << "New enemy born with name : " << name << ".\n";
> }
>
> Enemy(Enemy const & other)
> : name(other.name)
> {
> std::cout << "Copy of enemy made : " << other.name << ".\n";
> }
>
> const std::string& getName() const
> {
> std::cout << "Enamy name has been asked and given.\n";
> return name;
> }
>
> void setName(const std::string& n) {
> name = n;
> }
>
> virtual int update()
> {
> std::cout << "Enemy::update() called.\n";
> return (43);
> }
> };
>
> class EnemyWrapper : public Enemy, public luabind::wrap_base {
> public:
> EnemyWrapper(const std::string& n)
> : Enemy(n) {
> }
>
> virtual int update() {
> return (call<int>("update"));
> }
> }
>
> Enemy * CreateEnemy(std::string const & name)
> {
> return new Enemy(name);
> }
>
>
> int main() {
> lua_State * L = lua_open()
> luabind::open(L);
> luaL_openlibs(L);
>
> luabind::module(L) [
> luabind::class_<Enemy, EnemyWrapper>("Enemy")
> .def(luabind::constructor<const std::string&>())
> .property("name", &Enemy::getName, &Enemy::setName)
> .def("update", &Enemy::update,
> &EnemyWrapper::default_update)
> .def("CreateEnemy", &CreateEnemy)
> ];
>
> if (luaL_dofile(L, "wrapping.lua") != 0)
> std::cout << lua_tostring(L, -1) << std::endl;
> int i = 1;
> for (; i <= 10; ++i)
> {
> std::cout << i << " " ;
> Enemy * e = luabind::call_function<Enemy *>(L, "CreateEnemy", "toto");
> printf("%p :", e);
> std::cout << e->update() << std::endl;
> sleep(1);
> delete e;
> }
> lua_close(L);
> }
>
> Lua code:
> print("Start the script");
>
> class 'Zombie' (Enemy)
>
> function Zombie:__init(name)
> Enemy.__init(self, name);
> end
>
> function Zombie:update()
> print('Zombie:update() called.');
> self.talk();
> return (72);
> end
>
> function Zombie:talk()
> print("Yeah I'm a monster");
> end
>
> function CreateEnemy(name)
> return(Zombie(name));
> end
>
>
>
>
>
>
>
>
>
------------------------------------------------------------------------------
BlackBerry® DevCon Americas, Oct. 18-20, San Francisco, CA
The must-attend event for mobile developers. Connect with experts.
Get tools for creating Super Apps. See the latest technologies.
Sessions, hands-on labs, demos & much more. Register early & save!
http://p.sf.net/sfu/rim-blackberry-1
_______________________________________________
luabind-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/luabind-user
smime.p7s
(application/pkcs7-signature, 2 KB) - not displayed