我使用SWIG将一组类绑定到lua。我知道C++本身并不支持简单的补丁,我也不想修改我的C++对象,只是修改它们的lua表示。如果我想要开始修补SWIG导出的lua表和对象,那么问题就来了,这样我就可以修改Lua端显示的API。
例如,下面的lua代码:
game.GetEnemies1 = game.GetEnemies2没有像预期的那样工作。这一行之后的行为仍然与最初的GetEnemies1一致,而不是GetEnemies2。
我该如何解决这个问题?
发布于 2010-05-17 15:32:54
我已经通过添加和替换现有方法成功地对lua用户数据进行了monkeypatched。它涉及到修改它们的metatable。
为了向现有的Here's a sample对象添加几个方法,我必须做些什么。
如你所见,我不得不修改它的metatable,而不是修改对象本身。
这个解决方案只有在用户数据对象被设置为使它们的元变量“指向自身”的情况下才有效:mt.__index = mt。
致以问候!
发布于 2010-05-03 01:20:59
Swig从c++函数生成lua包装器,它不会将lua函数注入到c++中。如果GetEnemies1是一个从其他c++函数调用的c++函数,则猴子打补丁将不起作用。
您必须重写您的c++代码,以便执行GetEnemies1的代码查找某种您可以用swig包装的回调。
https://stackoverflow.com/questions/2754235
复制相似问题