2010-05-02 76 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