如何在luabind中进行模块编程(OOP,面向对象编程)

使用"require",我想要连接一个表示基类的lua文件。

lua_class1.lua(基类)

   class 'lua_testclass'

    function lua_testclass:__init()
        self.name = name
    end

    function lua_testclass:f(Value)
        Value[1] = 10000
    end

"lua_test1.lua(派生类)"

   require "lua_class1"

    class 'lua_testclass_wrapper' (lua_testclass)

    function lua_testclass_wrapper:__init()
        lua_testclass.__init(self, name)
    end

    function lua_testclass_wrapper:f(Value)
        lua_testclass.f(self, Value)
    end

    a = lua_testclass('example')
    b = lua_testclass_wrapper('example'

cpp文件引用了全局对象"a"和"a"对象调用"f"成员函数。但是,程序异常终止了。

luaL_dofile(pLS,"lua_test1.lua");
object objParam = newtable(pLS);
object obja = globals(pLS)["a"];
objParam[1] = 10;
call_member<void>(obja,"f",objParam);
int nParam = object_cast<int>(objParam[1]);

顺便说一下,以下是可以的..

class 'lua_testclass'

function lua_testclass:__init()
    self.name = name
end

function lua_testclass:f(Value)
    Value[1] = 10000
end

class 'lua_testclass_wrapper' (lua_testclass)

function lua_testclass_wrapper:__init()
    lua_testclass.__init(self, name)
end

function lua_testclass_wrapper:f(Value)
    lua_testclass.f(self, Value)
end

a = lua_testclass('example')
b = lua_testclass_wrapper('example'

我尝试了这种方式,但失败了。

Mod = require "lua_class1"

class 'lua_testclass_wrapper' (Mod.lua_testclass)

    function lua_testclass_wrapper:__init()
        Mod.lua_testclass.__init(self, name)
    end

    function lua_testclass_wrapper:f(Value)
        Mod.lua_testclass.f(self, Value)
    end

有好的方法吗?

谢谢。

点赞
用户9657642
用户9657642

我在很多方面测试了这个案例。我包含了一个基类的lua文件(“lua_class1.lua”)。 然后,它工作得非常好。 我想知道这个源码的原理是怎么样的。

luaL_dofile(pLS, "lua_class1.lua"); //include base class file
luaL_dofile(pLS, "lua_test1.lua");
object objParam = newtable(pLS);
object obja = globals(pLS)["a"];
objParam[1] = 10;
call_member<void>(obja, "f", objParam);
int nParam = object_cast<int>(objParam[1]);
2018-04-25 05:08:47