1

SWIG を使用して一連のクラスを lua にバインドしました。C++ 自体がモンキー パッチをサポートしていないことはわかっています。また、C++ オブジェクトを変更しようとしているのではなく、単にそれらの lua 表現を変更しようとしているだけです。問題は、lua 側で提示された API を変更できるように、Lua テーブルと SWIG によってエクスポートされたオブジェクトにモンキー パッチを適用し始めたい場合に発生します。

たとえば、次の lua コード:

game.GetEnemies1 = game.GetEnemies2

期待どおりに動作しません。その行の後の動作は、GetEnemies2 ではなく、元の GetEnemies1 と一貫性があります。

どうすればこの問題に対処できますか?

4

2 に答える 2

1

既存のメソッドを追加および置換することで、lua ユーザーデータにモンキーパッチを適用することに成功しました。それには、メタテーブルの変更が含まれていました。

これは、いくつかのメソッドを既存のユーザーデータ オブジェクトに追加するために私がしなければならなかったことのサンプルです。

ご覧のとおり、オブジェクト自体を変更する代わりに、そのメタテーブルを変更する必要がありました。

このソリューションは、メタテーブルが「自分自身を指す」ようにユーザーデータ オブジェクトが設定されている場合にのみ機能しますmt.__index = mt

よろしく!

于 2010-05-17T07:32:54.227 に答える
0

Swig は c++ 関数から lua ラッパーを生成しますが、lua 関数を c++ に注入しません。GetEnemies1 が他の C++ 関数から呼び出される C++ 関数である場合、モンキー パッチは機能しません。

GetEnemies1 を実行するコードが、swig でラップできる何らかのコールバックを探すように、C++ コードを書き直す必要があります。

于 2010-05-02T17:20:58.677 に答える