小编Rad*_*adi的帖子

覆盖lua中的c ++方法并在c ++中调用它

我曾经认为我可以在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++中执行.你是如何实现这一目标的?

=================== …

c++ methods lua overriding class

7
推荐指数
1
解决办法
2434
查看次数

标签 统计

c++ ×1

class ×1

lua ×1

methods ×1

overriding ×1