Lua + SWIG Monkey补丁

时间:2010-05-02 17:12:07

标签: c++ lua swig monkeypatching

我使用SWIG将一组类绑定到lua。我知道C ++本身不支持猴子修补,我不是要修改我的C ++对象,而只是修改它们的lua表示。如果我想开始猴子修补由SWIG导出的lua表和对象,问题就出现了,这样我就可以修改lua端提供的API。

e.g。以下lua代码:

game.GetEnemies1 = game.GetEnemies2

无法按预期工作。该行之后的行为仍然与原始GetEnemies1一致,而不是GetEnemies2。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

我已成功通过添加和替换现有方法来monkeypatched lua userdata。它涉及修改他们的元数据。

Here's a sample为了向现有的userdata对象添加几个方法,我必须做些什么。

正如您所看到的,我不得不修改对象iself,而是必须修改其metatable。

此解决方案仅适用于设置了userdata对象,以便其元表“指向自己”:mt.__index = mt

问候!

答案 1 :(得分:0)

Swig从c ++函数生成lua包装器,它不会将lua函数注入到c ++中。如果GetEnemies1是一个c ++函数,从其他c ++函数调用,那么猴子修补就不行了。

你必须重写你的c ++代码,以便执行GetEnemies1的代码寻找某种你可以用swig包装的回调。