代码之家  ›  专栏  ›  技术社区  ›  Tom J Nowell

Lua+SWIG猴子补丁

  •  1
  • Tom J Nowell  · 技术社区  · 15 年前

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

    game.GetEnemies1 = game.GetEnemies2
    

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

    如何解决这个问题?

    2 回复  |  直到 15 年前
        1
  •  1
  •   kikito    15 年前

    我已经通过添加和替换现有方法成功地对lua用户数据进行了monkeypatched。它涉及到修改他们的元表。

    Here's a sample

    如您所见,我没有修改对象本身,而是修改了它的元表。

    只有将userdata对象设置为使其元表“指向自身”时,此解决方案才会起作用: mt.__index = mt .

        2
  •  0
  •   mikerobi    15 年前

    Swig从c++函数生成lua包装器,它不向c++注入lua函数。如果GetEnemies1是一个c++函数,从其他c++函数调用,那么monkey补丁就不起作用了。

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