Вопрос

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

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

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

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top