我使用SWIG将一组类绑定到lua。我知道C ++本身不支持猴子修补,我不是要修改我的C ++对象,而只是修改它们的lua表示。如果我想开始猴子修补由SWIG导出的lua表和对象,问题就出现了,这样我就可以修改lua端提供的API。
e.g。以下lua代码:
game.GetEnemies1 = game.GetEnemies2
无法按预期工作。该行之后的行为仍然与原始GetEnemies1一致,而不是GetEnemies2。
我该如何解决这个问题?
答案 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包装的回调。