Чтение и запись структуры C из встроенного lua - PullRequest
3 голосов
/ 13 сентября 2010

Я хотел бы добавить lua, чтобы разрешить скрипты в моем приложении C ++.В частности, у меня есть две структуры, которые я хотел бы передать в качестве аргументов данной функции lua.Один будет только для чтения, другой будет для чтения / записи.Ниже приведены очень упрощенные примеры этих структур:

struct inData
{
    int x;
    int y;
    //many other fields follow
};

struct outData
{
    int a;
    double b;
    //other fields follow
};

Обе эти структуры созданы в коде C ++ и будут там обрабатываться как до, так и после вызова функций lua.Как я могу передать эти структуры в функцию lua, чтобы функция могла делать такие вещи:

if(inData.x > 5) then outData.a = 1 end

, и чтобы экземпляр outData действительно сохранял изменения после возврата из функции lua?

Ответы [ 3 ]

6 голосов
/ 14 сентября 2010

скучно + шаблон + многоязычный = SWIG.

http://www.swig.org/Doc1.3/Lua.html#Lua_nn13

1 голос
/ 14 сентября 2010

Вы также можете создать таблицу Lua, которая отражает ту же структуру данных для передачи информации между C и Lua.

0 голосов
/ 14 сентября 2010

Вы можете использовать пользовательские данные и поместить в них outdata *. Вы можете устанавливать на них пользовательские функции, в том числе метатабельные. Я не собираюсь проходить через это, потому что это ОЧЕНЬ шаблонный / клеевой код. По сути, вы создаете исходные данные в куче, вы указываете на них легкие пользовательские данные (посредством невероятно злого приведения), затем настраиваете настраиваемую метатабельность и используете __index, чтобы обеспечить доступ к данным с помощью пользовательской функции.

В принципе, это выполнимо, но скучно, как дерьмо. Также опасно, потому что Lua не понимает никаких типов C (или C ++) и вы постоянно имеете дело с void * s.

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