Lua + SWIG Monkey Patching - PullRequest
       11

Lua + SWIG Monkey Patching

1 голос
/ 02 мая 2010

Я использовал SWIG, чтобы связать набор классов с lua. Я знаю, что сам C ++ не поддерживает патчирование обезьян, и я не пытаюсь модифицировать мои объекты C ++, просто их представления lua. Проблема возникает, если я хочу, чтобы обезьяна исправила таблицы lua и объекты, экспортированные SWIG, чтобы я мог изменить API, представленный на стороне lua.

например. следующий код lua:

game.GetEnemies1 = game.GetEnemies2

не работает должным образом. Поведение после этой строки по-прежнему согласуется с исходным GetEnemies1, а не с GetEnemies2.

как мне бороться с этой проблемой?

Ответы [ 2 ]

1 голос
/ 17 мая 2010

Я успешно обработал пользовательские данные lua, добавив и заменив существующие методы. Это включало изменение их метатаблиц.

Вот пример того, что я должен был сделать, чтобы добавить пару методов к существующему объекту пользовательских данных.

Как видите, вместо изменения объекта iself мне пришлось изменить его метатабельность.

Это решение будет работать, только если ваши объекты пользовательских данных настроены так, что их метатаблицы «указывают на себя»: mt.__index = mt.

Привет!

0 голосов
/ 02 мая 2010

Swig генерирует оболочки lua из функций c ++, но не вводит функции lua в c ++. Если GetEnemies1 является функцией c ++, вызываемой из других функций c ++, исправление обезьян не будет работать.

Вам придется переписать ваш код на C ++, чтобы код, выполняющий GetEnemies1, искал какой-то обратный вызов, который можно обернуть с помощью swig.

...