1

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

例如以下 lua 代码:

game.GetEnemies1 = game.GetEnemies2

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

我该如何解决这个问题?

4

2 回答 2

1

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

下面是我为了向现有的 userdata 对象添加几个方法而必须做的一个示例。

如您所见,我不得不修改它的元表,而不是修改对象本身。

此解决方案仅在您的 userdata 对象设置为使其元表“指向自己”时才有效:mt.__index = mt

问候!

于 2010-05-17T07:32:54.227 回答
0

Swig 从 c++ 函数生成 lua 包装器,它不会将 lua 函数注入 c++。如果 GetEnemies1 是从其他 c++ 函数调用的 c++ 函数,则猴子修补将不起作用。

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

于 2010-05-02T17:20:58.677 回答