Передача переменных между C ++ и Lua через Swig - PullRequest
3 голосов
/ 19 мая 2009

Я работаю над проектом C ++ с большим количеством классов (150+), каждый из которых имеет от 10 до 300 полей или около того. Я действительно хотел бы иметь возможность предоставить интерфейс сценариев для целей тестирования, чтобы я мог кодировать обратные вызовы, которые не требуют повторной компиляции. Я хотел бы сделать это на Lua, так как я более знаком с его API C, чем с Python, но если это избавит от головной боли, я был бы рад сделать это на Python.

Я хорошо понимаю, как вызывать функции Lua из моего C ++ и наоборот, и я знаю, как передавать базовые типы данных туда и обратно. У меня есть вопрос, как разделить пользовательские типы данных между ними с помощью SWIG.

Например, в какой-то момент в моем C ++ я мог бы захотеть оценить пару частей данных-членов в объекте, который имеет 250 полей. Я хотел бы иметь возможность передать этот объект Lua, который затем (надеюсь?) Может использовать сгенерированные оболочки SWIG для манипулирования этим объектом, отображения определенных полей, а затем передать (потенциально измененный) объект обратно в C ++ для дальнейшего использования. .

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

Возможно ли это? Может ли кто-нибудь указать мне на учебник или явный пример?

Спасибо за любую помощь, которую вы можете предложить!

Ответы [ 3 ]

1 голос
/ 20 мая 2009

Если swig доставляет вам неприятности, мне повезло с последней версией tolua ++, которая предназначена исключительно для связывания C ++ и Lua. В качестве входных данных требуется модифицированный файл .h, что немного утомительно, но не более, чем модули Swig. У меня нет оснований отдавать предпочтение одному другому, но полезно знать об обоих.

1 голос
/ 19 мая 2009

Пока вы определяете пользовательские типы с помощью интерфейсов Swig (см. здесь для документации по Swig-Lua API), взаимодействие должно быть беспроблемным. Предоставленные оболочки Swig позволят вам создавать новые объекты, передавать их в C ++ и наоборот.

Я не верю, что оболочка Swig-Lua поддерживает классы директора, что означает, что расширение существующих классов, создание их экземпляров и передача их обратно в C ++ невозможно. Директора поддерживаются для таких языков, как Python, Java, C #, хотя.

0 голосов
/ 08 марта 2010

Вы должны также проверить Luabind. Этот реализует ООП для Lua и может отображать классы и типы данных из Lua обратно в C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...