Вопрос

Я могу неправильно понимать их использование или неправильно прочитать документацию, но как мне получить доступ к членам структуры или класса, передаваемых Lua в качестве Light Userdata? Например, если вектор с использованием следующей структуры

typedef struct Foo {
  int x;
  int y;
} Foo;

был объявлен как «тест» и определен как что -то вроде x = 413 и y = 612, и натолкнут с вызовом

lua_pushlightuserdata( L, (void *) &test ) ;

Как будет выглядеть код LUA функции, которая манипулирует или печатает x и y?

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

Решение

Light UserData в Lua - это просто указатель. Луа не понимает, как читать содержимое объекта, на которое ссылается указатель. Целью данных является разрешение одного вызова CAPI для передачи ссылки на другой вызов API.

Если вы хотите работать с данными в LUA, вам нужно выдвинуть его в стек, и в вашем случае я бы сделал это таблицей. Если вам нужны эти данные, синхронизированные между C и LUA, вам нужно будет записать функции с обеих сторон, чтобы обрабатывать задание и скопировать значение в другую среду. Другой вариант состоит в том, чтобы иметь данные только в LUA и получить их через API LUA, когда в C или иметь их в C и получить их через C API (который вы создали бы), когда в LUA.

Чтобы получить больше информации, Программирование в Луа и Lua-Users Wiki У каждого есть краткие описания.

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

Ничего такого. Вы не можете получить доступ или делать что -либо с пользовательскими данными из Lua. Вы должны предоставить функции C ++ для всех манипуляций. Конечно, это можно сделать проще благодаря правильному использованию метафункций.

О, и тебе это не нужно typedef struct дерьмо в C ++. Вы можете просто сказать

struct Foo {
    int x;
    int y;
};
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top