Доступ к пользовательским данным Light в Lua
Возможно, я неправильно понимаю их использование или неправильно истолковываю документацию, но как мне получить доступ к членам структуры или класса, переданным в Lua, в качестве легких пользовательских данных? Например, если вектор использует следующую структуру
typedef struct Foo {
int x;
int y;
} Foo;
был объявлен как "тест" и определен как что-то вроде х = 413 и у = 612, и толкнул с вызовом
lua_pushlightuserdata( L, (void *) &test ) ;
Как будет выглядеть Lua-код функции, которая манипулирует или печатает x и y?
2 ответа
Light userdata в Lua это просто указатель. Lua не понимает, как читать содержимое объекта, на который ссылается указатель. Цель этих данных - разрешить одному вызову C API передавать ссылку на другой вызов API.
Если вы хотите работать с данными в Lua, вам нужно поместить их в стек, и в вашем случае я бы сделал их таблицей. Если вам нужно синхронизировать эти данные между C и Lua, вам нужно написать функции с обеих сторон для обработки назначения и копирования значения в другую среду. Другой вариант - иметь данные только в Lua и извлекать их через API Lua, когда они находятся в C, или иметь их в C и получать их через API C (который вы бы создали) в Lua.
Для получения дополнительной информации, программирование на Lua и Lua-пользователи Wiki имеют краткое описание.
Ничего такого. Вы не можете получить доступ или сделать что-либо с userdata любого рода из Lua. Вы должны предоставить функции C++ для всех манипуляций. Конечно, это может быть облегчено путем правильного использования метафункций.
О, и тебе это не нужно typedef struct
дерьмо в C++. Вы можете просто сказать
struct Foo {
int x;
int y;
};