c++ - Lua + SWIG 猴子补丁

标签 c++ lua swig monkeypatching

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

例如以下 lua 代码:

game.GetEnemies1 = game.GetEnemies2

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

我该如何解决这个问题?

最佳答案

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

Here's a sample为了向现有用户数据对象添加几个方法,我必须做些什么。

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

这个解决方案只有在你的用户数据对象被设置为它们的元表“指向它们自己”时才有效:mt.__index = mt

问候!

关于c++ - Lua + SWIG 猴子补丁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2754235/

相关文章:

string - 在 Lua 中拆分多字节字符串

lua - 如何在c中获取lua表的表长度?

redis - 通过Lua在Redis中设置多个key

c++ - 具有 C++ 基类的 Python 子类

c++ - double vector 的 Python swig-wrapped vector 显示为元组

c++ - 指针访问 std::fstream 时出现问题

c++ - ADL 和 friend 注入(inject)

c++ - 如何使用 SWIG 从 lua 中的 C++ 类继承

c++ - 为什么 OPENCV 中有这么多函数使用 InputArray 和 OutputArray 作为函数参数?

c++ - GNU readline 空格引用