2010-05-02 75 views
1

我已经使用SWIG将一组类绑定到lua。我知道C++本身不支持猴子修补,我不想修改我的C++对象,仅仅是他们的lua表示。如果我想要启动猴子修补由SWIG导出的lua表和对象的问题,那么我可以修改lua端提供的API。Lua + SWIG Monkey修补

例如以下lua代码:

game.GetEnemies1 = game.GetEnemies2 

不能正常工作。该行后面的行为仍然与原始GetEnemies1而不是GetEnemies2一致。

我该如何解决这个问题?

回答

1

我已经成功通过添加和替换现有方法monkeypatched lua userdata。它涉及修改它们的metatables。

Here's a sample我必须做的,以便将一些方法添加到现有的userdata对象。正如你所看到的,我不得不修改它的metatable,

此解决方案仅适用于您的userdata对象设置为使其metatables“指向自己”的情况:mt.__index = mt

问候!

0

Swig从C++函数生成lua包装,它不会将lua函数注入到C++中。如果GetEnemies1是一个从其他C++函数调用的C++函数,那么猴子补丁不会起作用。

您将不得不重写您的C++代码,以便执行GetEnemies1的代码查找可以用swig包装的某种回调。

+0

我体会到使用猴子补丁只会影响Lua代码替换方法在Lua,并且在的Monkeypatching C++本身是不可能的,但是这是我的本意。有一些C++方法Id喜欢在lua端修补它,使它们更好,甚至只是重命名 – 2010-05-02 17:28:46