我曾经认为我可以在lua中覆盖一个类方法,这样当我在C++中调用该函数时,它将执行在lua中重写的内容.我的意思是,像这样:
C++类
class Person {
public:
Person(); // ctr
virtual void shout(); // Meant to be overriden
};
Run Code Online (Sandbox Code Playgroud)
假设我将该类绑定到lua,以便在lua中,我可以使用该对象:
--Lua code
p = Person:new()
p:shout()
Run Code Online (Sandbox Code Playgroud)
我想要实现的是这样的:
Lua文件
--luafile.lua
p = Person:new() --instantiate
--override shout()
p.shout = function(self) print("OVERRIDEN!") end
Run Code Online (Sandbox Code Playgroud)
C++代码
int main() {
lua_State* l = lua_open();
luaL_loadlibs(l);
bind_person_class(l);
luaL_dofile("luafile.lua");
Person* p = (Person*) get_userdata_in_global(l, "p"); // get the created person in lua
p->shout(); // expecting "OVERRIDEN" to be printed on screen
lua_close(l);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,您可以看到我正在尝试覆盖lua中的Person方法,并期望从c ++调用overriden方法.但是,当我尝试它时,不执行overriden方法.我想要实现的是覆盖方法在C++中执行.你是如何实现这一目标的?
=================== …