Lua добавить поле экземпляра в userdata с C ++ - PullRequest
1 голос
/ 02 марта 2020

Я хочу добавить несколько полей stati c в мои Lua объекты пользовательских данных, поступающие из C ++. Рассматриваемые объекты являются векторами, они созданы на земле C ++ и работают так, как есть, но я попытался lua_setfield в своих пользовательских данных, но я получаю ошибку attempt to index a Vector value, и я не хочу использовать .x(), .y(), .z() из-за необходимости вызова функции, pu sh для суммирования и последующего чтения на стороне Lua.

Есть ли способ зарегистрировать поля в пользовательских данных для доступа Lua

1 Ответ

0 голосов
/ 02 марта 2020

Userdata не имеет "полей". может иметь метатаблицу, для которой вы можете определить метаметоды __index и __newindex. При наличии такой метатаблицы первая функция вызывается при считывании значения поля пользовательских данных, а вторая вызывается при присвоении значения полю извне (ud.some_field = 4 или эквивалентный). Если вы хотите, чтобы поля были доступны только для чтения (до некоторой степени), вы можете просто реализовать __index, и попытки пользователя использовать __newindex потерпят неудачу.

Таким образом, в вашем коде C ++ после создания userdata, вы можете использовать lua_setmetatable, чтобы назначить ему таблицу, в которой определены эти методы. Конечно, эти функции должны будут получать доступ к реальному объекту C ++ из пользовательских данных и извлекать определенные c значения, которые вас интересуют.

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