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

时间:2018-04-20 06:52:37

标签: c++ lua

使用“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

有好办法吗?

感谢。

1 个答案:

答案 0 :(得分:0)

我在很多方面测试了这个案例。我包括了基类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]);